在数组中解码 json,在 json 中编辑数组和编码 - PHP
Decoding json in array , editing array and encoding in json - PHP
我是 php 的新手,正在尝试在数组中获取 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);不打印更新后的字符串 .
使用 json_decode(), edit your resulting array, then use json_encode(); 将 JSON 字符串解码为 return 数组为 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);
这是因为您必须将 not 保存在您在 foreach 中 => 之后定义的变量中。
您必须以以下格式存储它:
$json[0][0] ... = $base64String;
或
你必须在写foreach之前添加一个像$result = array()这样的新数组,然后将它存储在$result中。
如果密钥可以出现在任何地方,答案很简单:
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
的值每次都会更改,因此父循环不起作用..
你可以使用递归函数 lik @Ja͢ck 的答案。
我是 php 的新手,正在尝试在数组中获取 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);不打印更新后的字符串 .
使用 json_decode(), edit your resulting array, then use json_encode(); 将 JSON 字符串解码为 return 数组为 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);
这是因为您必须将 not 保存在您在 foreach 中 => 之后定义的变量中。 您必须以以下格式存储它:
$json[0][0] ... = $base64String;
或
你必须在写foreach之前添加一个像$result = array()这样的新数组,然后将它存储在$result中。
如果密钥可以出现在任何地方,答案很简单:
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
的值每次都会更改,因此父循环不起作用..
你可以使用递归函数 lik @Ja͢ck 的答案。