如何解析 JSON 字符串和迭代 JSON 对象

how to parse json string and iterate json object

本文关键字:JSON 迭代 对象 字符串 何解析      更新时间:2023-09-26

我向服务器发出了ajax请求并从json字符串中返回响应。当我选择JSON.stringify时,它的响应中有很多空格。当我尝试解析json对象时收到错误消息 语法错误: JSON.parse:JSON数据第 1 行第 1 列处的意外字符

下面是示例代码:

$.post("http://example.com/index.cfm?fuseaction=shopping.admin&stamps=getStampsRates&Order_No="+order_id+"&stamps_service_type="+selectedServiceType+"",function(data,status)
       {
           if(status=="success")
           {
               var data=JSON.parse(data);
               //original resonse aspected  from server     
               //   var json ='[{"PACKAGETYPE":"Postcard","AMOUNT":0.34},{"PACKAGETYPE":"Letter","AMOUNT":0.48},{"PACKAGETYPE":"Large Envelope or Flat","AMOUNT":0.98},{"PACKAGETYPE":"Thick Envelope","AMOUNT":1.93},{"PACKAGETYPE":"Package","AMOUNT":1.93},{"PACKAGETYPE":"Large Package","AMOUNT":1.93}] ';
               $.each(data, function(idx, obj) {
                   alert(obj.PACKAGETYPE);
               });
           }
       });

我做了一些更改,然后尝试解析:

var data=JSON.stringify(data);
var newJ= JSON.parse(data);
alert("newJ:"+JSON.stringify(newJ));

并获得以下共鸣:

 "'r'n'r'n't'r'n[{'"PACKAGETYPE'":'"Large Envelope or Flat'",'"AMOUNT'":2.69},{'"PACKAGETYPE'":'"Thick Envelope'",'"AMOUNT'":2.69},{'"PACKAGETYPE'":'"Package'",'"AMOUNT'":2.69},{'"PACKAGETYPE'":'"Large Package'",'"AMOUNT'":2.69}]'r'n't'r'n'r'n"

并尝试在 json 对象上方迭代,得到错误类型错误:t 未定义

请帮助我解决上述问题。

谢谢

我认为

你的问题可能很复杂。首先,在同一范围内,您有两个"数据",由于参考问题,它们可能会覆盖原始响应。另一个,就像@adeneo所说的,json在服务器端的格式不正确。所以试着改成这个。我创建了一个 JSFiddle 来解析您的 JSON 响应的两个版本,因为我们不确定根据您的帖子数据响应的确切外观

JSFiddle 上的代码示例

var json ='[{"PACKAGETYPE":"Postcard","AMOUNT":0.34},{"PACKAGETYPE":"Letter","AMOUNT":0.48},{"PACKAGETYPE":"Large Envelope or Flat","AMOUNT":0.98},{"PACKAGETYPE":"Thick Envelope","AMOUNT":1.93},{"PACKAGETYPE":"Package","AMOUNT":1.93},{"PACKAGETYPE":"Large Package","AMOUNT":1.93}]';
var json1 = '"'r'n'r'n't'r'n[{'"PACKAGETYPE'":'"Large Envelope or Flat'",'"AMOUNT'":2.69},{'"PACKAGETYPE'":'"Thick Envelope'",'"AMOUNT'":2.69},{'"PACKAGETYPE'":'"Package'",'"AMOUNT'":2.69},{'"PACKAGETYPE'":'"Large Package'",'"AMOUNT'":2.69}]'r'n't'r'n'r'n"'
var obj = JSON.parse(json);
$.each(obj, function(i, item) {
    console.log(obj[i].PACKAGETYPE);
});
json1 = json1.split('[')[1].split(']')[0].replace('''','');
json1 = '[' + json1 + ']';
console.log(json1);
var obj = JSON.parse(json1);
$.each(obj, function(i, item) {
    console.log(obj[i].PACKAGETYPE);
});