【问题标题】:Json_encode or remove last comma?Json_encode 或删除最后一个逗号?
【发布时间】:2013-11-05 18:08:53
【问题描述】:

我想出了如何获得我想要的结果(几乎)。我的代码在最后一个 ] 之前的末尾添加了一个逗号,所以它不会很有效。我知道我可以使用 Json_encode 从我的外部 json 构建我的数组,但我很难过。我要么需要删除最后一个逗号,要么使用 json_encode(我迷路了)有什么更好的想法吗?

代码:

原始 JSON

[
    {
        "timestamp": 1383609600,
        "localTimestamp": 1383609600,
        "issueTimestamp": 1383609600,
        "fadedRating": 4,
        "solidRating": 0,
        "swell": {
            "minBreakingHeight": 4,
            "absMinBreakingHeight": 3.836,
            "maxBreakingHeight": 6,
            "absMaxBreakingHeight": 5.992,
            "unit": "ft",
            "components": {
                "combined": {
                    "height": 7,
                    "period": 13,
                    "direction": 82.64,
                    "compassDirection": "W"
                },
                "primary": {
                    "height": 7,
                    "period": 13,
                    "direction": 72.94,
                    "compassDirection": "WSW"
                }
            }
        }

]

PHP 得到想要的结果

<?php
$url = 'http://magicseaweed.com/api/API_KEY/forecast/?spot_id=1';
$JSON = file_get_contents($url);



$data = json_decode($JSON,true);
    echo "[";


    foreach ($data as $record) {

    echo "[";
        echo "{$record['timestamp']}";
    echo ",";
        echo "{$record['swell']['absMinBreakingHeight']}";
    echo "]";
    echo ",";



    }   
echo "]";
?>

返回:期望的结果减去最后一个逗号(编辑长度)

[
    [
        1383609600,
        3.836
    ],
    [
        1383620400,
        4.081
    ],
] 

最好的方法是什么?

【问题讨论】:

  • 是什么阻碍了您对json_encode() 的访问?当替代方案是手动构造 JSON 字符串并希望格式正确时,它始终是正确的解决方案。
  • 看起来你需要的是一个二维数组,但你不确定如何构造它。对吗?
  • 我想我只是不明白在这种情况下如何设置它。我在正确的轨道上吗? $arr = ("a"=>"timestamp", "b"=>"swell.absMinBreakingHeight");回声 $json_encode($arr);
  • 一个好的起点是有效的 JSON 来进行解码。试试JSON Lint 之类的工具。就像转换为数组一样简单,对其进行迭代并进行操作,然后使用json_encode 转换回 JSON。
  • 是的,就是这样,使用正确的 PHP 语法。 $arr = array();初始化,然后在你的循环中,将子数组附加到它:$arr[] = array($record['timestamp'], $record['swell']['absMinBreakingHeight']); 在循环之后echo json_encode($arr);

标签: php json


【解决方案1】:

冒着在没有明确问题的情况下回答的风险,只需构建一个您想要的数组并对其进行编码:

foreach ($data as $record) {
    $array[] = array($record['timestamp'], $record['swell']['absMinBreakingHeight']);
}
echo json_encode($array); 

【讨论】:

    【解决方案2】:

    您可以将数据存储在临时数组中并使用 implode。

    $data = json_decode($JSON,true);
    $out = array();
    foreach ($data as $record) {
        $out[] = "[{$record['timestamp']},{$record['swell']['absMinBreakingHeight']}]";
    }   
    echo "[" . implode(',', $out) . "]";
    

    最好使用json_encode。像这样:

    $data = json_decode($JSON,true);
    $out = array();
    foreach ($data as $record) {
        $out[] = array($record['timestamp'], $record['swell']['absMinBreakingHeight']);
    }   
    echo json_encode($out);
    

    这段代码更简单。

    【讨论】:

      【解决方案3】:

      简而言之.. 删除字符串中的最后一个字符(此处为逗号)可以通过以下方式完成:

      $string = rtrim($string, ',');
      

      查看更多详细参考http://php.net/manual/en/function.rtrim.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        相关资源
        最近更新 更多