从使用 foreach 循环构造的 JSON 中删除最后一个逗号 [重复]

Posted

技术标签:

【中文标题】从使用 foreach 循环构造的 JSON 中删除最后一个逗号 [重复]【英文标题】:Remove last comma from JSON constructed with foreach loop [duplicate] 【发布时间】:2014-01-09 13:28:38 【问题描述】:

我有这个脚本来构造一个 JSON:

echo "";
echo "\"name\": \"flare\","."\n";
echo "\"children\": ["."\n";
foreach($tree as $tag => $customer)
    foreach($customer as $customerId => $order)
        echo "\"name\":\"".$customerId."\",";
        echo "\"children\": ["."\n";
            foreach($order as $orderId => $orderTotal)
                echo "\"name\": \"".$orderId."\", \"size\": \"".$orderTotal."\",";
            
        echo "]";
        echo ",";
    

echo "]";
echo "";

$Tree、$customer 和 $order 是多维数组的级别,用于重复循环以找到数组的特定“$order”级别。生成的 JSON 如下 JSON:


"name":"flare",
"children":[
    
    "name":"4",
    "children":[
    
        "name":"17",
        "size":"104.15"
        ,
        
        "name":"18",
        "size":"104.15"
        ,
        
        "name":"23",
        "size":"104.15"
        ,
        
        "name":"25",
        "size":"104.15"
        , // Remove this comma
    ]
    ,
    
    "name":"12",
    "children":[
        
        "name":"36",
        "size":"280.00"
        ,
        
        "name":"37",
        "size":"384.15"
        ,
        
        "name":"38",
        "size":"664.15"
        ,
        
        "name":"43",
        "size":"112.00"
        ,
        
        "name":"278",
        "size":"235.20"
        ,
        
        "name":"281",
        "size":"117.60"
        ,
        
        "name":"298",
        "size":"117.60"
        , // Remove this comma
    ]
    ,
    
    "name":"16",
    "children":[
        
        "name":"60",
        "size":"112.00"
        , // Remove this comma
    ]
    ,
    
    "name":"17",
    "children":[
        
        "name":"236",
        "size":"235.20"
        ,
        
        "name":"295",
        "size":"117.60"
        ,
    ]
    , // Revome this comma
]

一切正常,但我必须删除最后一个逗号,因为它会生成解析 JSON 的错误。我不能使用 substr() 和 rtrim() 因为它们删除了 JSON 中的所有逗号,而不是最后一个。

问候。

更新 现在我要删除两级逗号。

【问题讨论】:

不要通过将字符串混合在一起来构建 JSON!构建一个合适的 php 数据结构,然后通过 json_encode 推送它。 说真的:使用json_encode()。当语言提供简单的函数调用来为您完成时,不要尝试从头开始创建序列化数据格式。 ***.com/questions/6054033/… 根据选择的答案从 php 5.4 开始:$json_string = json_encode($data, JSON_PRETTY_PRINT); 【参考方案1】:

正如有人已经说过的,不要尝试手动构建JSON字符串,在php中构建数据结构并使用json_encode

$data = array("name" => "flare", "children" => array());
foreach($tree as $tag => $customer)
    foreach($customer as $customerId => $order)
        $_data = array("name" => $customerId, "children" => array());
        foreach($order as $orderId => $orderTotal)
              $_data["children"][] = array("name" => $orderId, "size" => $orderTotal);
        
        $data["children"][] = $_data;
    

echo json_encode($data, JSON_PRETTY_PRINT);

【讨论】:

以上是关于从使用 foreach 循环构造的 JSON 中删除最后一个逗号 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP foreach循环从mysql创建JSON

无法让 ForEach 循环在 SwiftUI 中使用嵌套的 JSON 数据运行 [关闭]

我想在c#中使用foreach循环一一读取具有特定json对象数组的json文件数据

为啥我的 foreach 循环与 users.json 文件中的键不匹配

TypeError:将循环结构转换为 JSON --> 从具有构造函数“ClientRequest”的对象开始

如何在 Zoho CRM Deluge 脚本中使用 for each 循环遍历 JSON 数组