как построить новую строку JSON из существующей строки JSON - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть несколько файлов, которые содержат данные json, которые выглядят так:

1.json:

[{
    "id": 2100059,
    "email": "",
    "company": "acme",
    "job_title": "",
    "first_name": "Jane",
    "last_name": "Doe"
 }, 
 {
    "id": 2199991,
    "email": "",
    "company": "Widgets Inc",
    "job_title": "",
    "first_name": "John",
    "last_name": "Doe"
 }]

2.json:

[{
    "id": 123456,
    "email": "",
    "company": "acme",
    "job_title": "",
    "first_name": "GI Jame",
    "last_name": "Adf"
 }, 
 {
    "id": 000001,
    "email": "",
    "company": "Widgets Inc",
    "job_title": "",
    "first_name": "bob",
    "last_name": "billy"
 }]

Как можноЯ объединяю эти два списка так, что это всего лишь одна строка с одним набором []?

До сих пор я записываю логику, читаемую в содержимом каждого файла, в отдельные строки.Но тогда я думаю, что я должен: 1. json_decode () каждая строка обрабатывать ее как объект

Хотя не уверен, как добавить к объекту.любые советы будут оценены.

РЕДАКТИРОВАТЬ 1

Я решил прочитать содержимое каждого файла в массив, а затем попробовать советы, предложенные ниже, чтобы использовать array_merge.когда я выполняю print_r для моего массива, это выглядит так: (фиктивные данные, но вы должны понять)

Array
(
    [0] => [{"id":2100059,"email":"","company":""},{"id":2129527,"email":"","company":""},{"id":2134804,"email":"","company":""},{"id":2148239,"email":"","company":""}]
    [1] => [{"id":2100059,"email":"","company":""},{"id":2129527,"email":"","company":""},{"id":2134804,"email":"","company":""},{"id":2148239,"email":"","company":""}]

    [2] => [{"id":2100059,"email":"","company":""},{"id":2129527,"email":"","company":""},{"id":2134804,"email":"","company":""},{"id":2148239,"email":"","company":""}
    [3] =>[{"id":2100059,"email":"","company":""},{"id":2129527,"email":"","company":""},{"id":2134804,"email":"","company":""},{"id":2148239,"email":"","company":""}]
)

И тогда это моя логика, которая пытается объединить все это в одинjson string:

    print_r($allpages);
    $finaljsonstring ='';
    foreach ($allpages as $item)
    {
        $finaljsonstring = $finaljsonstring + json_encode(array_merge(json_decode($item)));
    }
    echo $finaljsonstring;

Но что-то идет не так.(Я называю это как AJAX, так что это трудно отладить), но когда я console.log результатов от вызова AJAX, ничего не возвращается.В конечном итоге мне нужно вернуться к внешнему интерфейсу - это один массив строк json, подобный следующему:

[{}, {}, {}]

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать json_decode() и array_merge() для достижения того, что вы ищете.

<?php
$json_1 = <<<EOD
[{
    "id": 2100059,
    "email": "",
    "company": "acme",
    "job_title": "",
    "first_name": "Jane",
    "last_name": "Doe"
 }, 
 {
    "id": 2199991,
    "email": "",
    "company": "Widgets Inc",
    "job_title": "",
    "first_name": "John",
    "last_name": "Doe"
 }]
EOD;

$json_2 = <<<EOD
[{
    "id": 123456,
    "email": "",
    "company": "acme",
    "job_title": "",
    "first_name": "GI Jame",
    "last_name": "Adf"
 }, 
 {
    "id": 1122,
    "email": "",
    "company": "Widgets Inc",
    "job_title": "",
    "first_name": "bob",
    "last_name": "billy"
 }]
EOD;

Пример:

$json_decoded_1 = json_decode($json_1);

$json_decoded_2 = json_decode($json_2);

$arr_combined = array_merge( $json_decoded_1, $json_decoded_2 );

$json_combined = json_encode($arr_combined);

echo $json_combined;

Обратите внимание, вам не нужно проходитьвторой true параметр в json_decode() для преобразования строки в массив.Эти предметы могут оставаться объектами при использовании array_merge().

http://php.net/manual/en/function.array-merge.php

http://php.net/manual/en/function.json-decode.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...