如何在我的json中替换密钥的内容并使用php在shopware 6.5中保存

bxgwgixi  于 2023-08-08  发布在  PHP
关注(0)|答案(2)|浏览(121)

我正在做一个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": #####
                }
            }
        ]
    }
}


请帮帮忙,我能做错什么

sf6xfgos

sf6xfgos1#

我也可以通过以下方式找到它:

$data = json_decode($jsonData, true, 512, JSON_BIGINT_AS_STRING);


    $data['entity']['payments'][0]['state']['id'] = $logMessageId;

        
        


$modifiedJsonData = json_encode($data, JSON_PRETTY_PRINT);
        
  
  

  $existingData = json_decode(file_get_contents($fil), true);
        
     
  

  $existingData['entity']['payments'][0]['state']['id'] = $data['entity']['payments'][0]['state']['id'];

 $updatedJsonData = json_encode($existingData, JSON_PRETTY_PRINT);
        
   
  

  file_put_contents($fil, $updatedJsonData);

字符串

jfgube3f

jfgube3f2#

在$jsonData中有正确的JSON文本,并在使用json_decode()解码JSON时使用两个标志,第一个总是,第二个在当前场景中更具体:
1.第一个月

  1. JSON_BIGINT_AS_STRING
    范例:
$data = json_decode($jsonData, true, flags: JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);

字符串
(自PHP 8.0起)

$data = json_decode($jsonData, true, 512, JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);


(自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)来降低精度:

var_dump(json_decode('4599999999999999999999999999999999'));
var_dump(json_decode('4599999999999999999999999999999999', true, 512, JSON_BIGINT_AS_STRING));
float(4.6E+33)
string(34) "4599999999999999999999999999999999"

的字符串

相关问题