Javascript如何parsingJSON数组

我使用Sencha Touch(ExtJS)从服务器获取JSON消息。 我收到的信息是这样的:

{ "success": true, "counters": [ { "counter_name": "dsd", "counter_type": "sds", "counter_unit": "sds" }, { "counter_name": "gdg", "counter_type": "dfd", "counter_unit": "ds" }, { "counter_name": "sdsData", "counter_type": "sds", "counter_unit": " dd " }, { "counter_name": "Stoc final", "counter_type": "number ", "counter_unit": "litri " }, { "counter_name": "Consum GPL", "counter_type": "number ", "counter_unit": "litri " }, { "counter_name": "sdg", "counter_type": "dfg", "counter_unit": "gfgd" }, { "counter_name": "dfgd", "counter_type": "fgf", "counter_unit": "liggtggggri " }, { "counter_name": "fgd", "counter_type": "dfg", "counter_unit": "kwfgf " }, { "counter_name": "dfg", "counter_type": "dfg", "counter_unit": "dg" }, { "counter_name": "gd", "counter_type": "dfg", "counter_unit": "dfg" } ] } 

我的问题是,我不能parsing这个JSON对象,以便我可以使用每个计数器对象。

我试图这样做:

 var jsonData = Ext.util.JSON.decode(myMessage); for (var counter in jsonData.counters) { console.log(counter.counter_name); } 

我究竟做错了什么 ? 谢谢!

JavaScript有一个内置的JSONparsingstring,我认为是你有:

 var myObject = JSON.parse("my json string"); 

在你的例子中使用这个将是:

 var jsonData = JSON.parse(myMessage); for (var i = 0; i < jsonData.counters.length; i++) { var counter = jsonData.counters[i]; console.log(counter.counter_name); } 

这是一个工作的例子

编辑 :你使用循环有一个错误(我错过了我第一次阅读,信贷到@Evert的现货)。 使用for-in循环会将var设置为当前循环的属性名称,而不是实际的数据。 看到我上面更新的循环正确的用法

重要提示JSON.parse方法不适用于旧的浏览器,所以如果您打算通过某种方式使您的网站可以通过互联网连接,这可能是一个问题! 如果你真的有兴趣, 这是一个支持图表 (它勾选我的所有框)。

在for-in-loop中,运行variables保存属性名称,而不是属性值。

 for (var counter in jsonData.counters) { console.log(jsonData.counters[counter].counter_name); } 

但是作为计数器是一个数组,你必须使用一个正常的for循环:

 for (var i=0; i<jsonData.counters.length; i++) { var counter = jsonData.counters[i]; console.log(counter.counter_name); } 

这是我的答案,

 <!DOCTYPE html> <html> <body> <h2>Create Object from JSON String</h2> <p> First Name: <span id="fname"></span><br> Last Name: <span id="lname"></span><br> </p> <script> var txt = '{"employees":[' + '{"firstName":"John","lastName":"Doe" },' + '{"firstName":"Anna","lastName":"Smith" },' + '{"firstName":"Peter","lastName":"Jones" }]}'; //var jsonData = eval ("(" + txt + ")"); var jsonData = JSON.parse(txt); for (var i = 0; i < jsonData.employees.length; i++) { var counter = jsonData.employees[i]; //console.log(counter.counter_name); alert(counter.firstName); } </script> </body> </html> 

用于与服务器数据交互的“Sencha方法”是设置由Ext.data.Store代理的Ext.data.proxy.Proxy (在本例中为Ext.data.proxy.Ajax ),该Ext.data.reader.JsonExt.data.reader.Json (对于JSON编码的数据,还有其他的阅读器可用)。 为了将数据写回到服务器,有几种Ext.data.writer.Writer

这是一个像这样的设置的例子:

  var store = Ext.create('Ext.data.Store', { fields: [ 'counter_name', 'counter_type', 'counter_unit' ], proxy: { type: 'ajax', url: 'data1.json', reader: { type: 'json', idProperty: 'counter_name', rootProperty: 'counters' } } }); 

这个例子中的data1.json (在这个小提琴中也有提供)包含你的数据。 idProperty: 'counter_name'在这种情况下可能是可选的,但通常指向主键属性。 rootProperty: 'counters'指定哪个属性包含数据项的数组。

使用这种方式的存储设置,您可以通过调用store.load()从服务器重新读取数据。 您还可以将商店连接到任何Sencha Touch适当的UI组件,如网格,列表或表格。

您应该在ExtJs中使用数据存储和代理。 这里有很多例子 ,JSON阅读器会自动将JSON消息parsing成您指定的模型。

在使用ExtJs时,不需要使用基本的Javascript,所有东西都不一样,你应该使用ExtJs的方法来使一切正确。 仔细阅读文件,这是很好的。

顺便说一句,这些例子也适用于Sencha Touch(特别是v2),它基于与ExtJs相同的核心function。

更重要的是对我来说..

 var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}'; var contact = JSON.parse(jsontext); document.write(contact.surname + ", " + contact.firstname); document.write(contact.phone[1]); // Output: // Aaberg, Jesper // 555-0100 

参考: https : //docs.microsoft.com/en-us/scripting/javascript/reference/json-parse-function-javascript