如何在PHP中将JSON数组添加到现有的JSON中?

4

I have the following...

$json1:

[{
    "id": 1,
    "table_prefix": "movie",
    "display_name": "Movies"
}]

$json2:

[{
    "field_name": "Title",
    "column_name": "title",
    "sort_order": 0,
    "sort_section": 0,
    "required": 1,
    "relationship": "field",
    "table_type": "",
    "view_type": "text",
    "description": "",
    "multi_value": 0,
    "char_count": 255
}, {
    "field_name": "Synopsis",
    "column_name": "synopsis",
    "sort_order": 1,
    "sort_section": 0,
    "required": 0,
    "relationship": "field",
    "table_type": "",
    "view_type": "longtext",
    "description": "",
    "multi_value": 0,
    "char_count": 10000
}]

我希望$finalJSON的格式如下所示:

[{
    "id": 1,
    "table_prefix": "movie",
    "display_name": "Movies",
    "fields": [{
        "field_name": "Title",
        "column_name": "title",
        "sort_order": 0,
        "sort_section": 0,
        "required": 1,
        "relationship": "field",
        "table_type": "",
        "view_type": "text",
        "description": "",
        "multi_value": 0,
        "char_count": 255
    }, {
        "field_name": "Synopsis",
        "column_name": "synopsis",
        "sort_order": 1,
        "sort_section": 0,
        "required": 0,
        "relationship": "field",
        "table_type": "",
        "view_type": "longtext",
        "description": "",
        "multi_value": 0,
        "char_count": 10000
    }]
}]

有没有一个简单的PHP JSON函数,可以让我像这样将JSON数组附加到现有的JSON中?

你真的想要一个只有一个对象的数组吗? - nerdlyist
这将是一个需要快速、经常发生的事情吗?您可以使用 json_decode 进行解码,然后按照您想要的方式拼接,最后使用 json_encode() 进行重新编码。 - Blake
3个回答

3

这不是json格式,而是对象数组。

你可以简单地使用

$json1[0]->fields = $json2;

这是JSON格式,但不清楚他处理的是字符串还是对象。 - Blake
我不认为这是答案。 - MoeinPorkamel
由于没有引号/转义字符,我不认为这些是字符串。 - andrew

3
有没有一个简单的PHP JSON函数可以让我像这样附加JSON数组到现有的JSON中?
编程并不是魔法。你能想象如果PHP没有数组或对象来表示你的数据会怎样吗?如果你只有字符串,那将是一场噩梦,除非语言提供其他的抽象手段,允许我们用其他方式表示我们的数据。
虽然一个字符串可以包含歌曲或图像的字节数据,但你会问“有没有一个函数可以提高字符串的音量?”或者“我可以旋转字符串的图像内容吗?”不会的。你需要先将字符串的内容解码成适当抽象化的数据结构,然后再使用存在于该特定领域的函数来处理数据。
很容易发现JSON只是一串数据的字符串。因此,我们应该避免对数据字符串进行操作,因为其他数据结构提供了更好的操作手段。
在这个答案中,我们将从字符串中取出数据并填充PHP数组和对象。由于JSON是如此流行的格式,PHP提供了json_decode来完成这项工作。通过解码后的数据,我们可以通过简单的数组和对象属性赋值将第二个数据集添加到第一个数据集中。最后,使用json_encode重新编码数据以获得预期的结果。
$json1 = '[{
    "id": 1,
    "table_prefix": "movie",
    "display_name": "Movies"
}]';

$json2 = '[{
    "field_name": "Title",
    "column_name": "title",
    "sort_order": 0,
    "sort_section": 0,
    "required": 1,
    "relationship": "field",
    "table_type": "",
    "view_type": "text",
    "description": "",
    "multi_value": 0,
    "char_count": 255
}, {
    "field_name": "Synopsis",
    "column_name": "synopsis",
    "sort_order": 1,
    "sort_section": 0,
    "required": 0,
    "relationship": "field",
    "table_type": "",
    "view_type": "longtext",
    "description": "",
    "multi_value": 0,
    "char_count": 10000
}]';

$obj1 = json_decode($json1);
$obj1[0]->fields = json_decode($json2);
$finalJson = json_encode($obj1, JSON_PRETTY_PRINT);
echo $finalJson;

[
    {
        "id": 1,
        "table_prefix": "movie",
        "display_name": "Movies",
        "fields": [
            {
                "field_name": "Title",
                "column_name": "title",
                "sort_order": 0,
                "sort_section": 0,
                "required": 1,
                "relationship": "field",
                "table_type": "",
                "view_type": "text",
                "description": "",
                "multi_value": 0,
                "char_count": 255
            },
            {
                "field_name": "Synopsis",
                "column_name": "synopsis",
                "sort_order": 1,
                "sort_section": 0,
                "required": 0,
                "relationship": "field",
                "table_type": "",
                "view_type": "longtext",
                "description": "",
                "multi_value": 0,
                "char_count": 10000
            }
        ]
    }
]   

针对@andrew似乎无法解析输出的问题,请查看并运行以下代码片段。它可以很好地进行解析。

console.log(JSON.parse(`[
    {
        "id": 1,
        "table_prefix": "movie",
        "display_name": "Movies",
        "fields": [
            {
                "field_name": "Title",
                "column_name": "title",
                "sort_order": 0,
                "sort_section": 0,
                "required": 1,
                "relationship": "field",
                "table_type": "",
                "view_type": "text",
                "description": "",
                "multi_value": 0,
                "char_count": 255
            },
            {
                "field_name": "Synopsis",
                "column_name": "synopsis",
                "sort_order": 1,
                "sort_section": 0,
                "required": 0,
                "relationship": "field",
                "table_type": "",
                "view_type": "longtext",
                "description": "",
                "multi_value": 0,
                "char_count": 10000
            }
        ]
    }
]`));


但这不是有效的JSON JSON.parse('[{ "id": 1, "table_prefix": "movie", "display_name": "Movies" }]') result Uncaught SyntaxError:无效或意外的标记 - andrew
@andrew,我不知道为什么你的评论出现在我的帖子上,因为那不是我写的任何代码。无论如何,我添加了一个代码片段来向您展示我的PHP结果解析得非常好。 - Mulan

3

这个想法是需要使用json_decode将JSON转换为数组,操作字段,然后在重新编码回JSON格式。

试试这个:

$decoded_json = json_decode($json1, true);
$decoded_json[0]['fields'] = json_decode($json2, true);
$finalJSON = json_encode($decoded_json, JSON_PRETTY_PRINT);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接