簡體   English   中英

如何解析json字符串並迭代json對象

[英]how to parse json string and iterate json object

我向服務器發出ajax請求並從json字符串獲取響應。當我使用JSON.stringify時,它在響應中有很多空白。當我嘗試解析json對象時收到錯誤消息gastaxe SyntaxError: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對象,得到錯誤TypeError: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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM