解析JSON对象数组-空值防止反转

parsing an array of JSON objects - null value preventing upsert

本文关键字:空值 JSON 对象 数组 解析      更新时间:2023-09-26

我正在解析一个对象数组,每个数组中大约有12个字段。我用两个嵌套的for(var i = 0; i < array.length; i++)函数来做这件事,并且在几个响应中遇到了null字段。

我期望得到一个嵌入的对象,... "caption": {"id":"some id", "text":"some text"},但在某些情况下我反而得到了null。我的模式不要求字段有值,但是文档被踢出。

我怎样才能绕过这个?我希望null只是插入一个空白值,但事实并非如此。我在Meteor.js框架内工作,但我需要下面帮助的代码片段只是普通的旧javascript和mongodb upsert。错误在标题上。文本行。

Meteor.methods({
'getMethod': function (var1, var2) {
    check (var1, Number);
    this.unblock();
    var url = "https://www.url.com/"+var1+"/stuff?"+token+"&param="+var2;
    var result = HTTP.call("GET", url);
    if(result.statusCode===200) {
        var aArray = JSON.parse(result.content).data;
            for(var i = 0; i < aArray.length; i++){
                var id = aArray[i].id;
                var aItem = {
                   _id: aArray[i].id,
                   userId: aArray[i].user.id,
                   username: aArray[i].user.username,
                   created_time: parseInt(aArray[i].created_time),
                   type: aArray[i].type,
                   caption: aArray[i].caption.text, // THIS LINE IS THROWING THE ERROR !!
                }
                Collection.upsert(id, {$set: aItem}, {validationContext: 'upsertForm'}, function(error, result) {
                    if (error){
                        console.log("Error:", error);
                        return aArray;
                    }
                });
            }
    } else {
            console.log("Error: ", result.statusCode);
            var errorJson = JSON.parse(result.content);
            throw new Meteor.Error(result.statusCode, errorJson.error);
    }
  },
});

使用三进制检查标题上是否有text属性:

caption: (aArray[i].caption.text) ? aArray[i].caption.text : ''

编辑:如果标题属性有问题,则使用以下命令:

caption: (aArray[i].caption) ? aArray[i].caption.text : ''
h/t RobG