json 数组读取排序问题

今天遇到一个依赖健值数组读取排序的问题  

接口开发同事返回的json格式是这样的, 我在小程序调用接口读取数组遍历之后发现排序乱了

{
  "price_info": {
    
    "08": {
      "01": {
        "price": 9999,
        "booked": 0
      },
      "02": {
        "price": 99999,
        "booked": 0
      },
      "03": {
        "price": 99999,
        "booked": 0
      },
      "04": {
        "price": 99999,
        "booked": 0
      },
      "05": {
        "price": 99999,
        "booked": 0
      },
      "06": {
        "price": 99999,
        "booked": 0
      }
    },
    "09": {
      "01": {
        "price": "15",
        "booked": 1
      },
      "02": {
        "price": "15",
        "booked": 1
      },
      "03": {
        "price": "15",
        "booked": 0
      },
      "04": {
        "price": "15",
        "booked": 0
      },
      "05": {
        "price": "15",
        "booked": 0
      },
      "06": {
        "price": "15",
        "booked": 0
      }
    },
    "10": {
      "01": {
        "price": "15",
        "booked": 1
      },
      "02": {
        "price": "15",
        "booked": 0
      },
      "03": {
        "price": "15",
        "booked": 0
      },
      "04": {
        "price": "15",
        "booked": 0
      },
      "05": {
        "price": "15",
        "booked": 0
      },
      "06": {
        "price": "15",
        "booked": 0
      }
    }
  }
}

这是我的一个数组,price_info 健值提供是08、09、10 的排序 

在我的项目里我用for in 遍历数组也会出现排序错误

我通过https://jsoneditoronline.org/  在线解析, 发现结果变成这样了,排序的08、09 排到后面


 接着我将08,09 前面的0去掉,发现读取的顺序正常了

 解决方案

 http://w3help.org/zh-cn/causes/SJ9011 

  for-in 语句无法保证遍历顺序,应尽量避免编写依赖对象属性顺序的代码。如果想顺序遍历一组数据,请使用数组并使用 for 语句遍历。 如果想按照    定义的次序遍历对象属性

 如果遇到需要依赖对象的排序,最好采用数组形式,例如上面的json可以改为

  

{
  "price_info": [
    {"key":"08",
      "info": {
        "01": {
          "price": 9999,
          "booked": 0
        },
        "02": {
          "price": 99999,
          "booked": 0
        },
        "03": {
          "price": 99999,
          "booked": 0
        },
        "04": {
          "price": 99999,
          "booked": 0
        },
        "05": {
          "price": 99999,
          "booked": 0
        },
        "06": {
          "price": 99999,
          "booked": 0
        }
      }
    },
    {"key":"09",
      "info": {
        "01": {
          "price": 9999,
          "booked": 0
        },
        "02": {
          "price": 99999,
          "booked": 0
        },
        "03": {
          "price": 99999,
          "booked": 0
        },
        "04": {
          "price": 99999,
          "booked": 0
        },
        "05": {
          "price": 99999,
          "booked": 0
        },
        "06": {
          "price": 99999,
          "booked": 0
        }
      }
    },
    {"key":"10",
      "info": {
        "01": {
          "price": 9999,
          "booked": 0
        },
        "02": {
          "price": 99999,
          "booked": 0
        },
        "03": {
          "price": 99999,
          "booked": 0
        },
        "04": {
          "price": 99999,
          "booked": 0
        },
        "05": {
          "price": 99999,
          "booked": 0
        },
        "06": {
          "price": 99999,
          "booked": 0
        }
      }
    }
  ]
}

然后通过for 遍历,(不用 for in) 遍历出来的健值再判断使用即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joe.Xie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值