PHP preg_替换JSON内容的一部分
我得到了以下JSON字符串:PHP preg_替换JSON内容的一部分,php,json,Php,Json,我得到了以下JSON字符串: { "time":"321321545646", "documents":[ {"name":"name1","body":"HASH_BASE64 1"}, {"name":"name2","body":"HASH_BASE64 2"} ] } 在实际生产使用中,“HASH BASE64”将是BASE64编码的字符串。 如何用string=“LONGSTRING”替换每个body”标记的内容,以接收如下内容
{
"time":"321321545646",
"documents":[
{"name":"name1","body":"HASH_BASE64 1"},
{"name":"name2","body":"HASH_BASE64 2"}
]
}
在实际生产使用中,“HASH BASE64”将是BASE64编码的字符串。
如何用string=“LONGSTRING”替换每个body”标记的内容,以接收如下内容:
{
"time":"321321545646",
"documents":[
{"name":"name1","body":"LONGSTRING"},
{"name":"name2","body":"LONGSTRING"}
]
}
?您可能不应该使用正则表达式,而是通过解码、更改数据并再次编码:
$data=json\u decode($json);
对于($i=0;$idocuments);$i++){
$data->documents[$i]->body=“LONGSTRING”;
}
$json=json_encode($data);
您不应该使用正则表达式来修改JSON数据-PHP具有解析和编码JSON数据的本机函数。看
您不需要preg-replace()
只需通过json\u Decode()解码json即可
然后循环浏览json文档并更改每个文档数据,如下所示:
$json = json_decode('{
"time":"321321545646",
"documents":[
{"name":"name1","body":"HASH_BASE64 1"},
{"name":"name2","body":"HASH_BASE64 2"}
]
}');
foreach ($json->documents as $document){
$document->body = "LONGSTRING";
}
dump($json);
这是输出:
{#229 ▼
+"time": "321321545646"
+"documents": array:2 [▼
0 => {#228 ▼
+"name": "name1"
+"body": "LONGSTRING"
}
1 => {#227 ▼
+"name": "name2"
+"body": "LONGSTRING"
}
]
}
绝对不能使用preg_replace
将JSON解码为数组,修改值,用于将其编码回JSON。@MacBooc与JSON有何关系?您链接的问题?我的坏想法是使用正则表达式检测字符串中的base64,而我在标题中看到preg_replace。这是我希望使用正则表达式的一个原因:此JSON是通信日志的一部分,我希望在不做任何更改的情况下保存它。此外,在某些情况下,它不必是正确的JSON字符串,它可能会有一些错误。
$json = json_decode('{
"time":"321321545646",
"documents":[
{"name":"name1","body":"HASH_BASE64 1"},
{"name":"name2","body":"HASH_BASE64 2"}
]
}');
foreach ($json->documents as $document){
$document->body = "LONGSTRING";
}
dump($json);
{#229 ▼
+"time": "321321545646"
+"documents": array:2 [▼
0 => {#228 ▼
+"name": "name1"
+"body": "LONGSTRING"
}
1 => {#227 ▼
+"name": "name2"
+"body": "LONGSTRING"
}
]
}