【问题标题】:"Error parsing JSON field value. Unexpected OBJECT_START at [16], field=add" adding record to Solr via cURL“解析 JSON 字段值时出错。在 [16] 处出现意外的 OBJECT_START,字段 = 添加”通过 cURL 将记录添加到 Solr
【发布时间】:2018-07-17 17:39:24
【问题描述】:

基于示例here(和其他地方),我正在尝试将记录添加到简单的 Solr 索引(唯一的字段是 srcdest,都是单值字符串字段,而 solrconfig 是设置为通过 PHP 和 cURL 使用以下代码自动生成 id 值:

$data = array(
  "add" => array(
    "doc" => array(
      "src" => $src,
      "dest" => $dest
    ),
    "commitWithin" => 1000,
  ),
);

$data_string = json_encode(array($data));
$add_url = 'https://my-solr-url.com/solr/my_index/update?commit=true&wt=json';
$add_ch = curl_init($add_url);
curl_setopt($add_ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($add_ch, CURLOPT_POST, 1);
curl_setopt($add_ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($add_ch, CURLOPT_POSTFIELDS, $data_string);
$add_response = json_decode(curl_exec($add_ch));
curl_close($add_ch);

但是,当我运行它时,我收到以下错误:

Error parsing JSON field value. Unexpected OBJECT_START at [16], field=add

基于Solr docs,我尝试了以下变体:

$data = array(
  'src' => $src,
  'dest' => $dest
);

$data_string = json_encode(array($data));
$add_url = 'https://my-solr-url.com/solr/my_index/update/json/docs?commit=true&wt=json';
$add_ch = curl_init($add_url);
curl_setopt($add_ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($add_ch, CURLOPT_POST, 1);
curl_setopt($add_ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($add_ch, CURLOPT_POSTFIELDS, $data_string);
$add_response = json_decode(curl_exec($add_ch));
curl_close($add_ch);

但现在我收到关于 Unknown field src 的错误消息。据我所知,我正在关注文档,但没有任何效果。我需要改变什么?

【问题讨论】:

  • 你为什么编码aray($data)而不是简单的$data
  • 因为是PHP数组(这是PHP代码),URL中数据需要是json格式。
  • 但正如@YvesLeBorg 所问,为什么$data_string = json_encode(array($data)); ...?就做$data_string = json_encode($data);
  • 哦。谢谢,@IncredibleHat,我明白你在说什么。那成功了。我会添加一个答案。

标签: php json curl solr


【解决方案1】:

原来问题在于我正在创建一个双数组:

$data = array(
  "add" => array(
    "doc" => array(
      "src" => $src,
      "dest" => $dest
    ),
    "commitWithin" => 1000,
  ),
);

$data_string = json_encode(array($data));

一旦我将最后一行更改为

$data_string = json_encode($data);

效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多