我遇到了问题,我从外部API接收到我无法控制下面的JSON消息:
“{”searchResults“:[{”resultNumber“:1,”distance“:0.06,”sourceName“:”mqap.ntpois“,”name“:”Chef Chen's Express“,”distanceUnit“:”m“ “键”: “1f9bcc0e-e03a-44d9-B034-c235c34997e2”, “字段”:{ “POSTAL_CODE”: “17101”}},{ “resultNumber”:2 “距离”:0.07, “SOURCENAME”:” mqap.ntpois”, “名称”: “Prive的”, “distanceUnit”: “M”, “关键”: “ff5dcd5f-32ec-45fb-afd4-e66931ef84e2”, “字段”:{ “POSTAL_CODE”: “17101”} },{“resultNumber”:3,“距离”:0.07,“sourceName”:“mqap.ntpois”,“name”:“波旁街站”,“distanceUnit”:“m”,“key”:“a4f03b4d- 12de-44ad-9ada-0f19beb34004" , “字段”:{ “POSTAL_CODE”: “17101”}},{ “resultNumber”:4, “距离”:0.11, “SOURCENAME”: “mqap.ntpois”, “姓名” :“Pasquale's Restaurant”,“distanceUnit”:“m”,“key”:“a05c487e-d81d-48e0-87a8-718db70ec366”,“fields”:{“postal_code”:“17101”}},{“resultNumber”: 5,“距离”:0.12,“sourceName”:“mqap.ntpois”,“name”:“Palumbos Italian Eatery”,“distanceUnit”:“m”,“key”:“595afcbd-f61a-41ea-be2f-753648a8b7e8 “ ”字段“:{ ”POSTAL_CODE“: ”17101“}},{ ”resultNumber“:6中, ”距离“:0.12,” sourceNa me“:”mqap.ntpois“,”name“:”Zias At Red Door“,”distanceUnit“:”m“,”key“:”1393b154-0785-4ca8-8f3a-4190ab808817“,”fields“:{” postal_code“:”17101“}},{”resultNumber“:7,”距离“:0.13,”sourceName“:”mqap.ntpois“,”name“:”Dunes Mediterraneal Cuisine LLC“,”distanceUnit“:”m“ “键”: “3f8a43d1-7948-4653-bdbb-31222f24676f”, “字段”:{ “POSTAL_CODE”: “17101”}},{ “resultNumber”:8中, “距离”:0.13, “SOURCENAME”:” mqap.ntpois”, “名称”: “Bricco”, “distanceUnit”: “M”, “关键”: “3f2e7653-1313-4e17-b70a-9c04a31a029f”, “字段”:{ “POSTAL_CODE”: “17101”} },{“resultNumber”:9,“距离”:0.13,“sourceName”:“mqap.ntpois”,“name”:“Gingerbread Man Downtown”,“distanceUnit”:“m”,“key”:“2c36f5e0- 801E-4f9e-91b6-7e9ae602a93d”, “字段”:{ “POSTAL_CODE”: “17101”}},{ “resultNumber”:10, “距离”:0.14, “SOURCENAME”: “mqap.ntpois”, “姓名” :“国际之家”,“distanceUnit”:“m”,“key”:“2f328ca1-6fe4-44ec-964e-f7a6a73bfafd”,“fields”:{“postal_code”:“17101”}}],“origin”: {“latLng”:{“lng”: - 76.881821,“lat”:40.259572},“adminArea4”:“Dauphin County”,“adminArea5Type” : “城市”, “adminArea4Type”: “县”, “adminArea5”: “哈里”, “街”: “”, “adminArea1”: “美国”, “adminArea3”: “PA”, “类型”:“S “ ”displayLatLng“:{ ”LNG“: - 76.881821, ”LAT“:40.259572}, ”LINKID“:282035911 ”POSTALCODE“: ”“, ”sideOfStreet“: ”N“, ”dragPoint“:假” adminArea1Type “:” 国家 “ ”geocodeQuality“: ”CITY“, ”geocodeQualityCode“: ”A5XAX“, ”adminArea3Type“: ”国家“}, ”resultsCount“:10, ”hostedData“:[{ ”表名“:” mqap。 ntpois”, “extraCriteria”: “group_sic_code =”, “参数”:[ “581208”], “COLUMNNAMES”:[ “POSTAL_CODE”]}], “总页数”:1, “信息”:{ “的StatusCode”: 0,“copyright”:{“text”:“©2015 MapQuest,Inc。”,“imageUrl”:“http://api.mqcdn.com/res/mqlogo.gif”,“imageAltText”:“©2015 MapQuest,Inc。”},“messages”: []}, “选项”:{ “kmlStyleUrl”: “http://www.mapquestapi.com/kml-default.kml”, “shapeFormat”: “生”, “模糊性”:真 “的pageSize”:10, “半径”:1, “当前页” :1, “单元”: “M”, “maxMatches”:10}}“
我有限制使用DOJO-AJAX和CORS来发送和接收消息但是由于某种原因它是一个普通的字符串,我不能使用下面的代码在这个对象中循环:
renderReply:function(reply,textStatus,jqXHR){ var pois = new MQA.ShapeCollection(); var html ='IDNAMEADDRESSZIPCATEGORYDISTANCE(miles)';
var jsonObj = dojo.toJson(reply);
// add POI markers and populate the search result table
for (i = 0; i < reply.length; i++) {
var result = reply[i];
正如你所看到的,我已经尝试用toJson转换它但是出于某种原因最糟糕的是在消息中添加\并且在回复中[i]第一个对象是“”“引号。我已经尝试过访问孩子了reply.searchResults但它表示未定义的对象。
由于
答案 0 :(得分:1)
我不确定这里有足够的上下文给出一个理想的答案,但我会立即指出该字符串已经 JSON,因此dojo.toJson
正在对已经字符串化的字符串进行字符串化。在较新版本的Dojo中,您需要dojo.fromJson
(或者,最好是dojo/json.parse
。
我还要指出,一旦你解析了这个JSON字符串,你可能想要迭代解析对象中的searchResults
属性,而不是对象本身。
require(['dojo/json', ...], function(JSON, ...) {
// Assuming `reply` contains the string:
var replyObj = JSON.parse(reply);
var results = replyObj.searchResults;
for (var i = 0, l = results.length; i++) {
// Do something with results[i]
}
});