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日

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突