/ / como analisar string json e iterar objeto json - javascript, jquery, json

como analisar json string e iterar json objeto - javascript, jquery, json

Eu fiz uma solicitação ajax para o servidor e volteiresposta de como string json. quando vou para JSON.stringify, tem muitos espaços em branco na resposta. quando tento analisar em objeto json, mensagem de erro recebida SyntaxError: JSON.parse: caractere inesperado na linha 1, coluna 1 dos dados JSON.

Abaixo está o código de exemplo:

$.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);
});
}
});

Fiz algumas alterações e tentei analisar:

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

e obtendo a seguinte ressonância:

 "rnrntrn[{"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}]rntrnrn"

E tente iterar acima do objeto json, obtendo erro TypeError: t é indefinido.

Por favor me ajude a resolver o problema acima.

obrigado

Respostas:

1 para resposta № 1

Acho que seu problema pode ser composto.Primeiro, no mesmo escopo, você tem dois "dados" que podem substituir a resposta original por causa do problema de referência. Outro, como @adeneo disse, o json estava malformado do lado do servidor. Portanto, tente mudar para isso. Eu criei um JSFiddle para analisar as duas versões de suas respostas JSON, pois não temos certeza de como a resposta de dados se parece com base em sua postagem.

Amostra de código aqui em 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 = ""rnrntrn[{"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}]rntrnrn""

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);
});