簡體   English   中英

使用 php 編輯 json 文件

[英]Edit json file with php

我有一個 json 文件結構如下:

{
   "data": {
       "Category": {
           "Product1": [{
               "Code": "abc"
           }],
           "Product2": [{
               "Code": "cba"
           }]
       },
       "Category2": {
           "Product3": [{
               "Code": "abcabc"
           }],
           "Product4": [{
               "Code": "cbacba"
           }]
       },
       "Category3": {
           "Product5": [{
               "Code": "abcabcabc"
           }],
           "Product6": [{
               "Code": "cbacbacba"
           }]
       }
   }
}
                            

如何使用 php 腳本更改類別名稱? 例如,如果我從一個名為“$oldcategory”(將是現有類別之一)和“$newcategory”的表單中收到 2 個變量,如何打開 json 文件,將“$newcategory”放在“$oldcategory”的位置"是並重新保存文件嗎?

<?php
$oldcategory= $_POST['oldcategory'];
$newcategory= $_POST['newcategory'];
$jsonString = file_get_contents('data.json');
$data = json_decode($jsonString, true);

...
foreach($data["data"] as $key=>$value){
    $new = $data["data"][$oldcategory];
    $data["data"][$newcategory]= $new ; 
}
unset($data["data"][$oldcategory]);

$newJsonString = json_encode($data);
file_put_contents('data.json', $newJsonString);
?>

如果我正在更改“Category2”,我希望結果是:

{
   "data": {
       "Category": {
           "Product1": [{
               "Code": "abc"
           }],
           "Product2": [{
               "Code": "cba"
           }]
       },
       "New_Category2": {
           "Product3": [{
               "Code": "abcabc"
           }],
           "Product4": [{
               "Code": "cbacba"
           }]
       },
       "Category3": {
           "Product5": [{
               "Code": "abcabcabc"
           }],
           "Product6": [{
               "Code": "cbacbacba"
           }]
       }
   }
}
                            

而不是這個:

{
   "data": {
       "Category": {
           "Product1": [{
               "Code": "abc"
           }],
           "Product2": [{
               "Code": "cba"
           }]
       },
       "Category3": {
           "Product5": [{
               "Code": "abcabcabc"
           }],
           "Product6": [{
               "Code": "cbacbacba"
           }]
       },
       "New_Category2": {
           "Product3": [{
               "Code": "abcabc"
           }],
           "Product4": [{
               "Code": "cbacba"
           }]
       }
   }
}
                            

這是一個可能的解決方案:

foreach($data["data"] as $key=>$value){
    if ($key == $oldcategory){
    $key = $newcategory;}
    $new["data"][$key] = $value;
}


$newJsonString = json_encode($new);
file_put_contents('data.json', $newJsonString);

這最終成為我的問題的解決方案:

<?php
$oldcategory= $_POST['oldcategory'];
$newcategory= $_POST['newcategory'];
$jsonString = file_get_contents('data.json');
$data = json_decode($jsonString, true);

...
foreach($data["data"] as $key=>$value){
    if ($key == $oldcategory){
    $key = $newcategory;}
    $new["data"][$key] = $value;
}

$newJsonString = json_encode($new);
file_put_contents('data.json', $newJsonString);
?>

您可以使用條件,並創建一個具有所需值的新數組。 當您到達循環中的$oldcategory時,將鍵替換為$newcategory

$newArray = [];
foreach($data["data"] as $key=>$value){
    if($key == $oldcategory) {
        $newArray[$newcategory] = $value;
    } else {
        $newArray[$key] = $value;
    }
}

$newJsonString = json_encode($newArray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM