在PHP中循环一个字符串并构建一个json数组


Loop through an string and build a json array in PHP

我有以下json字符串从购物车请求返回。

[{"id":19,"name":"Memory","display_name":"Memory","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/19'/values.json","resource":"'/options'/19'/values"}},{"id":20,"name":"Add Keyboard & Mouse","display_name":"Add Keyboard & Mouse","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/20'/values.json","resource":"'/options'/20'/values"}},{"id":21,"name":"Monitor","display_name":"Monitor","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/21'/values.json","resource":"'/options'/21'/values"}},{"id":22,"name":"Operating System","display_name":"Operating System","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/22'/values.json","resource":"'/options'/22'/values"}},{"id":23,"name":"AntiVirus","display_name":"AntiVirus","type":"RB","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/23'/values.json","resource":"'/options'/23'/values"}}]

我需要在上面循环并提取id"

的每个值

然后为每个值调用另一个url。这将返回一个json字符串(对于id=19):

[{"id":73,"option_id":19,"label":"1GB DDR2 RAM (default)","sort_order":0,"value":"1GB DDR2 RAM (default)"},{"id":74,"option_id":19,"label":"2GB DDR2 RAM (+ $15.00)","sort_order":1,"value":"2GB DDR2 RAM (+ $15.00)"}]

And id = 20

[{"id":75,"option_id":20,"label":"No (Default)","sort_order":0,"value":"No (Default)"},{"id":76,"option_id":20,"label":"Yes (+$18)","sort_order":1,"value":"Yes (+$18)"}]

我现在需要将所有这些组合起来,并作为json数组回显。

所以问题是。1. 如何将第一个转换为数组并循环。2. 将所有返回的字符串组合成一个json数组。

MrWarby

    $firstJSONArray = json_decode('[{"id":19,"name":"Memory","display_name":"Memory","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/19'/values.json","resource":"'/options'/19'/values"}},{"id":20,"name":"Add Keyboard & Mouse","display_name":"Add Keyboard & Mouse","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/20'/values.json","resource":"'/options'/20'/values"}},{"id":21,"name":"Monitor","display_name":"Monitor","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/21'/values.json","resource":"'/options'/21'/values"}},{"id":22,"name":"Operating System","display_name":"Operating System","type":"S","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/22'/values.json","resource":"'/options'/22'/values"}},{"id":23,"name":"AntiVirus","display_name":"AntiVirus","type":"RB","values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/23'/values.json","resource":"'/options'/23'/values"}}]');
    $finalArray = array();
    foreach ($firstJSONArray as $record) {
        $itemID = $record->id;
        // get data for each ID from your API like you have given example of 18 and 19 and store the push data to final array
        $finalArray[] = "json_data_from_api_for_particular_id";
    }
    echo json_encode($finalArray);
  1. 使用json_decode
  2. 使用json_encode

如果您的PHP版本较旧,没有这些函数,以上页面中的注释是替代实现。

约:

$inJSON = <<<EOF
[
{"id":19,"name":"Memory","display_name":"Memory","type":"S",
  "values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/19'/values.json","resource":"'/options'/19'/values"}},
{"id":20,"name":"Add Keyboard & Mouse","display_name":"Add Keyboard & Mouse","type":"S",
  "values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/20'/values.json","resource":"'/options'/20'/values"}},
{"id":21,"name":"Monitor","display_name":"Monitor","type":"S",
  "values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/21'/values.json","resource":"'/options'/21'/values"}},
{"id":22,"name":"Operating System","display_name":"Operating System","type":"S",
  "values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/22'/values.json","resource":"'/options'/22'/values"}},
{"id":23,"name":"AntiVirus","display_name":"AntiVirus","type":"RB",
  "values":{"url":"https:'/'/store-v035aw9.mybigcommerce.com'/api'/v2'/options'/23'/values.json","resource":"'/options'/23'/values"}}
]
EOF;
$decode = json_decode($inJSON);
foreach ($decode as $key => $item) {
   echo "Id:" . $item->id . "'n";
}

顺便说一下,您打算进行的每个URL调用的JSON输出似乎表明它返回一个JSON数组。你不能用一个URL调用你需要的所有id值来获得所有你想要发回的项目吗?对第二台服务器的多个请求可能存在性能问题,将其减少到一个调用将避免将多个响应连接在一起的需要。

否则你将不得不

  1. 从返回的字符串中删除开头和结尾的[]
  2. 将它们连接在一起

    $finalResponse = '['。Join (',', $responses)。"]";