我正在做一个shopware项目,需要我设置一个json的所有订单处理。
json存储在一个目录中,我已经取出并传递给变量**$fil**。
$filer = $order1->getOrderNumber() . '_' . $country2->getIso() . '.json';
$fil = __DIR__ . '/' . $filer;
$file_contents = file_get_contents($fil);
字符串
然后将存储在变量**$fil**中的json传递给变量$jsonData
$jsonData = $fil;
型
我试图通过将JSON解码为关联数组来替换如下键的值
$data = json_decode($jsonData, true);
型
要替换的密钥如下(尝试替换ID)
$data['entity']['payments'][0]['state']['id'] = $logMessageId;
型
然后尝试将其保存回变量modifiedJsonData中,并替换回目录
$modifiedJsonData = json_encode($data, JSON_PRETTY_PRINT);
file_put_contents($fil, $modifiedJsonData);
型
它似乎部分工作,但不是完全工作,而不是单独替换(ID)
例如:$data['entity']['payments'][0]['state']['id']
它替换了json的所有内容,如下所示,json的内容应该比下面的更多:
{
"entity": {
"payments": [
{
"state": {
"id": #####
}
}
]
}
}
型
请帮帮忙,我能做错什么
2条答案
按热度按时间sf6xfgos1#
我也可以通过以下方式找到它:
字符串
jfgube3f2#
在$jsonData中有正确的JSON文本,并在使用json_decode()解码JSON时使用两个标志,第一个总是,第二个在当前场景中更具体:
1.第一个月
JSON_BIGINT_AS_STRING
个范例:
字符串
(自PHP 8.0起)
型
(自PHP 7.3起)
JSON_THROW_ON_ERROR
您只看到
$data['entity']['payments'][0]['state']['id']
的JSON的原因是,由于解析失败,$data = json_decode(...)
操作返回了null
。使用JSON_THROW_ON_ERROR
会将任何错误转换为异常,使其更明显,因为它会在出错时停止脚本。这将防止您在以后的输出中搜索错误。
如果发生错误,则抛出JsonException,而不是设置使用json_last_error()和json_last_error_msg()检索的全局错误状态。
JSON_PARTIAL_OUTPUT_ON_ERROR
优先于JSON_THROW_ON_ERROR
。从PHP 7.3.0开始可用。* (PHP Manual)*JSON_BIGINT_AS_STRING
将大整数解码为它们的原始字符串值。* (PHP Manual)*
BIGINT指的是BigInt(ECMA 262),一种用于非常大(负和正)整数的JavaScript数值类型,json_decode()可以很容易地使用(3v4l.org demo)来降低精度:
的字符串