【问题标题】:"msg":"Error parsing JSON field value. Unexpected OBJECT_START"msg":"解析 JSON 字段值时出错。意外的 OBJECT_START
【发布时间】:2016-08-31 13:44:53
【问题描述】:

我正在使用 node 和 mongoose 来更新 watson 排名和检索数据库。我正在尝试将文档添加到集合中。我可以添加一个文档。但是,我为多个创建的 json 对象失败了。我在这里看到了这个答案,但它是针对 curl 的。我想知道是否有人可以帮助我处理 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] } } ]

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

当我尝试删除添加前面的 { 时,我在参数列表之后收到一个错误(缺少)并且它不会运行。

【问题讨论】:

  • 好吧,[ add: { doc: ... 不会是有效的任何东西。我不知道 API;它想要{ add: { doc: ...}} 的集合还是想要像{ add: [ { doc: ...}, { doc: ...} ]} 这样添加的集合?文档怎么说?
  • 示例有: { "add" : { "doc" : { "id" : 1, "author" : "brenckman,m.", "bibliography" : "j.ae. scs . 25, 1958, 324.”, “body” : “exnt .”, “title” : “滑流中机翼空气动力学的实验研究”。 } }, "add" : { "doc" : { "id" : 2, "author" : "ting-yili", "bibliography" : "纽约州特洛伊伦斯勒理工学院航空工程系", "body" :“简单流动。”,“标题”:“简单不可压缩流体。” } },

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


【解决方案1】:

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})
}

【讨论】:

    【解决方案2】:
    [ 
        add: {doc: [Object] },
        add : {doc: [Object] },
        //...
        add : {doc: [Object] }
    ]
    

    是关联数组,在JS中翻译为对象。
    而且一个对象不能有多个同名的属性。

    不过,您可能需要的是一个简单的 arra:

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

    【讨论】:

      【解决方案3】:

      [ 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);      
            }
          });
      

      【讨论】:

      • 我进行了更改,但仍然出现相同的错误。此外,我得到的密钥来自 Mongoose 数据库,因此它们是独一无二的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 2022-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多