" msg":"解析JSON字段值时出错。意外的OBJECT_START

时间:2016-08-31 13:44:53

标签: javascript json node.js ibm-watson retrieve-and-rank

我使用node和mongoose来更新watson排名并检索数据库。我试图将文档添加到集合中。我可以添加一个文档。但是,我为多个创建的json对象失败了。我在这里看到了这个答案,但这是为了卷曲。我想知道是否有人可以帮我解决JS问题。

    // add a document
    //var doc = { id : 1234, title_t : 'Hello', text_field_s: 'some text' };
    var data = [];

    for (var count = 0; count < documents.length ; count++){
        data.push({"add":{"doc":{id : documents[count]._id, problem : documents[count].problem, description : documents[count].description, resolution : documents[count].resolution}}})
    }

    console.log(data);

    solrClient.add(data, function(err) {
      if(err) {
        console.log('Error indexing document: ' + err);
      } else {
        console.log('Indexed a document.');
        solrClient.commit(function(err) {
          if(err) {
            console.log('Error committing change: ' + err);
          } else {
            console.log('Successfully commited changes.');
            callback(documents);
          }
        });
      }
    });

我明白了:

[ { add: { doc: [Object] } },
  { add: { doc: [Object] } },
  { add: { doc: [Object] } },
  { add: { doc: [Object] } },
  { add: { doc: [Object] } },
  { add: { doc: [Object] } } ]

但是,我想我需要这个: [add:{doc:[Object]}, 添加:{doc:[Object]}, ...

当我尝试删除{在添加之前,我在参数列表之后得到错误(缺失))并且它不会运行。

3 个答案:

答案 0 :(得分:0)

查看the test code,我认为您需要使用一个简单的文档对象数组:

var data = [];

for (var count = 0; count < documents.length ; count++){
  data.push({ id : documents[count]._id, problem : documents[count].problem, description : documents[count].description, resolution : documents[count].resolution})
}

答案 1 :(得分:0)

[ 
    add: {doc: [Object] },
    add : {doc: [Object] },
    //...
    add : {doc: [Object] }
]

是一个关联数组,在JS中作为对象进行翻译 并且对象不能具有多个名为相同的属性。

你可能需要的是一个简单的arra:

[
    {doc: [Object] },
    {doc: [Object] },
    //...
    {doc: [Object] }
]

答案 2 :(得分:0)

[ add: {doc: [Object] }, add : {doc: [Object] }, ...无效,因为密钥不是唯一的。

我认为你的代码是正确的。只需更改callback(null, documents);

即可

我认为callback适合您的上层方法。

因此,您在问题示例代码中没有callback

您无需致电commit。只需添加即可。

solrClient.add(data, function(err, added) {
      if(err) {
        console.log('Error indexing document: ' + err);
      } else {
        console.log('Indexed a document.');  
        console.log(added);      
      }
    });