zippohippo 2022-03-29 01:21 采纳率: 100%
浏览 174
已结题

微信小程序 JS解析JSON数组 求解

服务器返回的JSON数组:
[{"id":1,"name":"山峰类","son":[{"id":1,"name":"华山"},{"id":2,"name":"泰山"},{"id":3,"name":"黄山"}]},{"id":2,"name":"河流类","son":[{"id":7,"name":"长江"},{"id":8,"name":"黄河"}]},{"id":3,"name":"湖泊类","son":[{"id":4,"name":"洞庭湖"},{"id":5,"name":"鄱阳湖"},{"id":6,"name":"青海湖"}]}]

格式化后
[{
"id": 1,
"name": "山峰类",
"son": [{
"id": 1,
"name": "华山"
}, {
"id": 2,
"name": "泰山"
}, {
"id": 3,
"name": "黄山"
}]
}, {
"id": 2,
"name": "河流类",
"son": [{
"id": 7,
"name": "长江"
}, {
"id": 8,
"name": "黄河"
}]
}, {
"id": 3,
"name": "湖泊类",
"son": [{
"id": 4,
"name": "洞庭湖"
}, {
"id": 5,
"name": "鄱阳湖"
}, {
"id": 6,
"name": "青海湖"
}]
}]

我想得到的数据
[{id: 1, name: "山峰类", son: [{id: 1, name: "华山"},{id: 2, name: "泰山"}, {id: 3, name: "黄山"}]},{id: 2, name: "河流类", son: [{id: 7, name: "长江"}, {id: 8, name: "黄河"}]},{id: 3, name: "湖泊类", son: [{id: 4, name: "洞庭湖"}, {id: 5, name: "鄱阳湖"}, {id: 6, name: "青海湖"}]}]

格式化后
[{
id: 1,
name: "山峰类",
son: [{
id: 1,
name: "华山"
}, {
id: 2,
name: "泰山"
}, {
id: 3,
name: "黄山"
}]
}, {
id: 2,
name: "河流类",
son: [{
id: 7,
name: "长江"
}, {
id: 8,
name: "黄河"
}]
}, {
id: 3,
name: "湖泊类",
son: [{
id: 4,
name: "洞庭湖"
}, {
id: 5,
name: "鄱阳湖"
}, {
id: 6,
name: "青海湖"
}]
}]

我用parse函数报错:


```javascript
var obj = JSON.parse(res.data);

/*
报错信息:
SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
*/
我也曾用字符串替换函数,直接去掉KEY的双引号,也没搞定
Page({
  /**
   * 页面的初始数据
   */
  data: {
    resultTemp: [], // **请问怎么通过onload从服务器取值?**
    //resultTemp: [{id: 1, name: "山峰类", son: [{id: 1, name: "华山"},{id: 2, name: "泰山"}, {id: 3, name: "黄山"}]},{id: 2, name: "河流类", son: [{id: 7, name: "长江"}, {id: 8, name: "黄河"}]},{id: 3, name: "湖泊类", son: [{id: 4, name: "洞庭湖"}, {id: 5, name: "鄱阳湖"}, {id: 6, name: "青海湖"}]}]  // **这么直接初始化是没问题的**
  },  
  
onLoad: function (e) {
    var that = this;
    wx.request({
      url: app.serverUrl + 'api/getList/',//json数据地址
      headers: {
        'Content-Type': 'application/json'
      },
      success: function (res) {
        var jsonStr= res.data;
        jsonStr = jsonStr.toString().replace(" ","");
        if(typeof jsonStr!= 'object'){
          jsonStr= jsonStr.replace(/\ufeff/g,"");
          var jj = JSON.parse(jsonStr);
          res.data = jj;
        }
        that.setData({
          resultTemp: res.data,
        })
      }
    })

卡在这个地方很多天了,反复测试一直找不到好的解决办法。
谢谢!

  • 写回答

4条回答 默认 最新

  • CSDN专家-showbo 2022-03-29 09:22
    关注

    标准json字符串不行吗?干嘛转怪异模式的json字符串?而且success回调中的jsonStr是json对象吧,toString()后就得到[object Object],[object Object],[object Object]字符串内容,已经不是原来的json字符串内容了。

    应该用JSON.stringify转json字符串后再替换

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 3月29日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?