«Ошибка синтаксического анализа значения поля JSON. Неожиданный OBJECT_START в [16], field = add» добавление записи в Solr через cURL

Основываясь на примере здесь (и других местах), я пытаюсь добавить запись в простой индекс Solr (единственными полями являются src и dest, оба поля строки с одним значением, а solrconfig настроен на автоматическое создание значения id) через PHP и cURL с использованием следующего кода:

$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 я попробовал следующий вариант:

$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?

YvesLeBorg 17.07.2018 19:44

Потому что это массив PHP (это код PHP), а данные в URL-адресе должны быть в формате json.

wonder95 17.07.2018 19:50

Но, как спросил @YvesLeBorg, почему именно $data_string = json_encode(array($data)); ...? Вобще $data_string = json_encode($data);

IncredibleHat 17.07.2018 19:51

Ой. спасибо, @IncredibleHat, я понимаю, о чем вы говорите. Это помогло. Добавлю ответ.

wonder95 17.07.2018 19:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
250
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оказывается, проблема заключалась в том, что я создавал двойной массив:

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

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

Как только я изменил последнюю строку на

$data_string = json_encode($data);

все работало нормально.

Другие вопросы по теме