【问题标题】:Remove the last comma of a JSON file and PHP删除 JSON 文件和 PHP 的最后一个逗号
【发布时间】:2015-07-09 22:54:32
【问题描述】:

我有一个带有 PHP 的 JSON 文件,我想删除最后一个逗号,因为它会导致错误。代码如下:

{
"data": [
<?php
    require_once("../../config.php");
    $qtodos = $mysqli->query("SELECT * FROM negocios");
    while($todos = $qtodos -> fetch_assoc()) {
        ?>
        {
            "id": <?php echo $todos['idnegocios']; ?>,
            "category": "real_estate",
            "title": "<?php echo $todos['nombre']; ?>",
            "location": "<?php echo $todos['direccion']; ?>",
            "latitude": 51.541599,
            "longitude": -0.112588,
            "url": "item-detail.html",
            "type": "Apartment",
            "type_icon": "assets/icons/store/apparel/umbrella-2.png",
            "rating": 4,
            "gallery":
                [
                    "assets/img/items/1.jpg",
                    "assets/img/items/5.jpg",
                    "assets/img/items/4.jpg"
                ],
            "features":
                [
                    "Free Parking",
                    "Cards Accepted",
                    "Wi-Fi",
                    "Air Condition",
                    "Reservations",
                    "Teambuildings",
                    "Places to seat"
                ],
            "date_created": "2014-11-03",
            "price": "$2500",
            "featured": 0,
            "color": "",
            "person_id": 1,
            "year": 1980,
            "special_offer": 0,
            "item_specific":
                {
                    "bedrooms": 4,
                    "bathrooms": 2,
                    "rooms": 4,
                    "garages": 1,
                    "area": 240
                },
            "description": "asasasas odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet pellentesque mauris. Proin sit amet scelerisque risus. Donec semper semper erat ut mollis. Curabitur suscipit, justo eu dignissim lacinia, ante sapien pharetra duin consectetur eros augue sed ex. Donec a odio rutrum, hendrerit sapien vitae, euismod arcu.",
            "last_review": "Curabitur odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet",
            "last_review_rating": 5
        },
<?php
}
?>
    ]
}

我尝试了很多解决方案,但从未在此代码中工作。不知道是什么时候循环的最后一次迭代,不能去掉。

【问题讨论】:

  • @Sergio 为什么不先简单地在循环中填充 php-array,然后使用 json_encode 输出呢?这在意识形态上会更正确。
  • @stdob 的回答是这里唯一明智的回答
  • @Sergio 实际上,您的目标不是删除逗号。你的目标是正确地表述问题,这将避免不必要的和错误的行动。最后学习如何开发软件。扪心自问——我真的需要删掉一个逗号,还是需要在循环中获取数据,填充数据的结构并转换成另一种格式?

标签: php json


【解决方案1】:

获取查询行数并创建一个计数器以了解您在循环中迭代的行,如果计数器与总行数不同,则仅添加逗号:

  {
    "data": [
    <?php
        require_once("../../config.php");
        $qtodos = $mysqli->query("SELECT * FROM negocios");
        $TotalRcount = $qtodos->num_rows; // <<<< row count
        $counter = 0;

        while($todos = $qtodos -> fetch_assoc()) { $counter++ // <<<< add the counter
            ?>
            {
                "id": <?php echo $todos['idnegocios']; ?>,
                "category": "real_estate",
                "title": "<?php echo $todos['nombre']; ?>",
                "location": "<?php echo $todos['direccion']; ?>",
                "latitude": 51.541599,
                "longitude": -0.112588,
                "url": "item-detail.html",
                "type": "Apartment",
                "type_icon": "assets/icons/store/apparel/umbrella-2.png",
                "rating": 4,
                "gallery":
                    [
                        "assets/img/items/1.jpg",
                        "assets/img/items/5.jpg",
                        "assets/img/items/4.jpg"
                    ],
                "features":
                    [
                        "Free Parking",
                        "Cards Accepted",
                        "Wi-Fi",
                        "Air Condition",
                        "Reservations",
                        "Teambuildings",
                        "Places to seat"
                    ],
                "date_created": "2014-11-03",
                "price": "$2500",
                "featured": 0,
                "color": "",
                "person_id": 1,
                "year": 1980,
                "special_offer": 0,
                "item_specific":
                    {
                        "bedrooms": 4,
                        "bathrooms": 2,
                        "rooms": 4,
                        "garages": 1,
                        "area": 240
                    },
                "description": "asasasas odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet pellentesque mauris. Proin sit amet scelerisque risus. Donec semper semper erat ut mollis. Curabitur suscipit, justo eu dignissim lacinia, ante sapien pharetra duin consectetur eros augue sed ex. Donec a odio rutrum, hendrerit sapien vitae, euismod arcu.",
                "last_review": "Curabitur odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet",
                "last_review_rating": 5
            }<?php
            if($TotalRcount != $counter)
            { echo ','};  // <<<< only add the comma when the counter is different than total rows
    }
    ?>
        ]
    }

【讨论】:

    【解决方案2】:

    许多可能的方法。我只挑一个....
    删除尾随的文字逗号并像这样更改脚本

    $first = true;
    while($todos = $qtodos -> fetch_assoc()) {
        if ($first) {
            $first = false;
        }
        else {
            echo ',';
        }
    ?>
            {
                "id":
    

    即该脚本不会在一条记录之后而是在下一条记录之前打印逗号。

    【讨论】:

      【解决方案3】:

      您可以添加一个计数并将计数与总行数匹配,这样当它到达最后一条记录时,它不会回显逗号

      {
      "data": [
      <?php
          require_once("../../config.php");
          $qtodos = $mysqli->query("SELECT * FROM negocios");
          $count = 1;
          while($todos = $qtodos -> fetch_assoc()) {
              ?>
              {
                  "id": <?php echo $todos['idnegocios']; ?>,
                  "category": "real_estate",
                  "title": "<?php echo $todos['nombre']; ?>",
                  "location": "<?php echo $todos['direccion']; ?>",
                  "latitude": 51.541599,
                  "longitude": -0.112588,
                  "url": "item-detail.html",
                  "type": "Apartment",
                  "type_icon": "assets/icons/store/apparel/umbrella-2.png",
                  "rating": 4,
                  "gallery":
                      [
                          "assets/img/items/1.jpg",
                          "assets/img/items/5.jpg",
                          "assets/img/items/4.jpg"
                      ],
                  "features":
                      [
                          "Free Parking",
                          "Cards Accepted",
                          "Wi-Fi",
                          "Air Condition",
                          "Reservations",
                          "Teambuildings",
                          "Places to seat"
                      ],
                  "date_created": "2014-11-03",
                  "price": "$2500",
                  "featured": 0,
                  "color": "",
                  "person_id": 1,
                  "year": 1980,
                  "special_offer": 0,
                  "item_specific":
                      {
                          "bedrooms": 4,
                          "bathrooms": 2,
                          "rooms": 4,
                          "garages": 1,
                          "area": 240
                      },
                  "description": "asasasas odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet pellentesque mauris. Proin sit amet scelerisque risus. Donec semper semper erat ut mollis. Curabitur suscipit, justo eu dignissim lacinia, ante sapien pharetra duin consectetur eros augue sed ex. Donec a odio rutrum, hendrerit sapien vitae, euismod arcu.",
                  "last_review": "Curabitur odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet",
                  "last_review_rating": 5
              }
      <?php
          if ((int)$qtodos->num_rows != $count)
              echo ',';
          $count++;
      }
      ?>
          ]
      }
      

      【讨论】:

      • 这不会在每次迭代时增加 $count 变量。
      • 它是else语句之后的第一行,所以只会在else条件下执行。
      【解决方案4】:
      Hope, this will work 
      `{
      "data": [
      <?php
          require_once("../../config.php");
          $qtodos = $mysqli->query("SELECT * FROM negocios");
          $count = 0;
          while($todos = $qtodos -> fetch_assoc()) {
              ?>
              {
                  "id": <?php echo $todos['idnegocios']; ?>,
                  "category": "real_estate",
                  "title": "<?php echo $todos['nombre']; ?>",
                  "location": "<?php echo $todos['direccion']; ?>",
                  "latitude": 51.541599,
                  "longitude": -0.112588,
                  "url": "item-detail.html",
                  "type": "Apartment",
                  "type_icon": "assets/icons/store/apparel/umbrella-2.png",
                  "rating": 4,
                  "gallery":
                      [
                          "assets/img/items/1.jpg",
                          "assets/img/items/5.jpg",
                          "assets/img/items/4.jpg"
                      ],
                  "features":
                      [
                          "Free Parking",
                          "Cards Accepted",
                          "Wi-Fi",
                          "Air Condition",
                          "Reservations",
                          "Teambuildings",
                          "Places to seat"
                      ],
                  "date_created": "2014-11-03",
                  "price": "$2500",
                  "featured": 0,
                  "color": "",
                  "person_id": 1,
                  "year": 1980,
                  "special_offer": 0,
                  "item_specific":
                      {
                          "bedrooms": 4,
                          "bathrooms": 2,
                          "rooms": 4,
                          "garages": 1,
                          "area": 240
                      },
                  "description": "asasasas odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet pellentesque mauris. Proin sit amet scelerisque risus. Donec semper semper erat ut mollis. Curabitur suscipit, justo eu dignissim lacinia, ante sapien pharetra duin consectetur eros augue sed ex. Donec a odio rutrum, hendrerit sapien vitae, euismod arcu.",
                  "last_review": "Curabitur odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet",
                  "last_review_rating": 5
              }
          if($count != mysql_num_rows($todos))
          {
              ,
          }
          $count += 1;
      <?php
      }
      ?>
          ]
      }`
      

      【讨论】:

      • 您使用 mysql_num_rows 已弃用,Sergio 正在使用 mysqli 类。还有为什么要使用 $count+=1;当你可以简单地做 $count++;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2016-08-17
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多