我有两个这样的JSON字符串:
$json1 = '[ {"src":"1","order":"2"}, {"src":"10","order":"20"}, ... ]';
和
$json2 = '[ {"src":"4","order":"5"}, {"src":"6","order":"7"}, ... ]';
我正在尝试使用它来合并它们:
$images = array_merge(json_decode($json1 ),json_decode($json2));
$json = '[';
$comma = null;
foreach($images as $image)
{
$comma = ',';
$json .= $comma.'{"src":"'.$image['src'].'","order":"'.$image['order'].'"}';
}
$json .= ']';
echo $json;
但是我收到了这个错误:
错误:无法使用stdCLASS的对象类型..
我做错了什么?
答案 0 :(得分:6)
当您调用json_decode时,您将其解码为对象。如果你想要它是一个数组,你必须做
$images = array_merge(json_decode($json1, true), json_decode($json2, true));
有关json_decode的更多信息:
http://php.net/manual/en/function.json-decode.php
答案 1 :(得分:1)
制作时
foreach($images as $image)
{
$comma = ',';
$json .= $comma.'{"src":"'.$image['src'].'","order":"'.$image['order'].'"}';
}
您需要更改:
foreach($images as $image)
{
$json .= $comma.'{"src":"'.$image->src.'","order":"'.$image->order.'"}';
$comma = ',';
}
要访问对象的字段,您需要使用“ - >”运算符,如$ image-> src。
另外,第一个$逗号需要为null,因此我改变了foreach中行的顺序。
答案 2 :(得分:0)
问题在于您是在手动执行json_encode
应该做的事情。这部分:
$images = array_merge(json_decode($json1), json_decode($json2));
很好。
json_decode
中的单个array_merge
将解码为对象数组,array_merge
会将它们合并在一起。您不需要将它们解码为多维数组,以实现此目的。
要将其恢复为JSON,您不应该使用foreach
循环并手动构建JSON。你得到的错误是,因为你是使用数组语法访问一个对象,但你可以用这个替换foreach
循环来避免整个问题:
$json = json_encode($images);
事实上,整个事情可以在一行中完成:
$json = json_encode(array_merge(json_decode($json1), json_decode($json2)));
答案 3 :(得分:-1)
如果您绝对想将它用作数组,只需将其设置为一个数组即可。 这些对于在循环中设置对象属性非常有用,尤其是在类中。不过你的情况。
$json1 = '[ {"src":"1","order":"2"}, {"src":"10","order":"20"}]';
$json2 = '[ {"src":"4","order":"5"}, {"src":"6","order":"7"}]';
$images = array_merge(json_decode($json1),json_decode($json2));
$json = '[';
$comma = null;
foreach($images as $image)
{
$image=(array)$image;
$comma = ',';
$json .= $comma.'{"src":"'.$image['src'].'","order":"'.$image['order'].'"}';
}
$json .= ']';