[英]Decoding json in array , editing array and encoding in json - PHP
我是php中的newbee,并尝试获取数组中的json并想更改以下json中的键是我的代码:
$json = json_decode(file_get_contents('all_json_files/jobs.json'), true);
foreach ($json as $key=>$row){
foreach ( $row as $key=>$row){
foreach ( $row as $key=>$row){
foreach ($row as $key=>$row){
if(strcmp($key,"security_block")==0)
{
foreach ($row as $k=>$r){
if(strcmp($k,"job_payload_hash")==0)
{
$row[$k]['job_payload_hash']=$base64String;
print_r($row);
}
}
}
}
}
}
}
print_r($json);
问题是print_r($ row); 正在正确更新,但print_r($ json); 不打印更新的字符串。
如果密钥可以出现在任何地方,答案很简单:
function update_hash(&$item, $key, $base64String)
{
if ($key == "job_payload_hash") {
$item = $base64String;
}
}
array_walk_recursive($json, 'update_hash', 'something');
结构与以前假定的有所不同。 尽管上面的方法可以工作,但下面的方法可能是更直接的方法:
foreach (array_keys($json['jobs']) as $jobId) {
$json['jobs'][$jobId]['job']['security_block']['job_payload_hash'] = 'something';
}
您多次使用$key
和$row
变量。 因此, $key
值每次都会更改,因此父循环不起作用。
您可以使用@Ja͢ck的递归函数lik answer。
使用json_decode()解码JSON字符串,编辑结果数组,然后使用json_encode() ;。 将数组返回为JSON编码的字符串。
另外,请使用array_key_exists()而不是比较数组键字符串。
$array = json_decode($json);
if(array_key_exists("job_payload_hash", $array){
$array["job_payload_hash"] = base64encode($var);
}
$json = json_encode($array);
这是因为您不必保存在foreach中=>之后定义的变量中。 您必须将其存储为以下格式:
$json[0][0] ... = $base64String;
要么
在编写foreach之前,必须添加一个类似于$ result = array()的新数组,然后将其存储在$ result中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.