使用jquery解析JSON数据?

时间:2011-01-04 11:14:08

标签: jquery html json parsing

我遇到了将hello.json中的json数据解析为当前html文件的问题。

如何从hello.json获取投资者,事件和价格数据到三个单独的数组。

http://compliantbox.com/mobile/optionsedge/hi.html

请帮帮我!!!

这是我的HTML代码:

    <html>
    <head>
      <script src="http://code.jquery.com/jquery-1.4.4.js"></script>
    </head>
    <body>
    <script>

    $.getJSON("http://compliantbox.com/mobile/optionsedge/hello.json?jsoncallback=?",
      {},
      function(data) { alert(data);  $.each(data.items, function(i,item){ alert(); });
      });
    </script>
    </body>
    </html>

这是我的json代码:

{ "data": 

{ 

"current_condition":[{

        "investors": [{"active"},{"agressive"},{"conservative"},{"day trader"},{"very active"}], 

        "events": [{"3 months"},{"weekly"},{"monthly"},{"leaps"},{"heaps"}], 

        "price": [{"4"},{"3"},{"9"},{"5"},{"2"}]

    } ] }}

3 个答案:

答案 0 :(得分:6)

更新3 :我刚看了你的链接页面(总是将相关代码复制到问题本身中),这就是你的问题:

$.each(data.items, function(i,item){
  $("<html/>").attr("src", item.event);
  if ( i == 3 ) return true;
});

结果对象中没有data.items反序列化您指向的(现在有效的)JSON。根本没有items。您的JSON描述了一个具有一个属性data的对象,该属性又具有属性current_conditions,该属性是一个包含一个条目的数组,一个具有属性investors的对象,{{1} }和events。请参阅更新2中的代码,了解如何与其进行交互。

更新2 :如果您更改JSON以使其有效,则jQuery将起作用。我的意思是,成千上万的网站每天使用这个... Live example,您的数据会被按下以使其有效。

更新:现在您已经发布了JSON,我们可以看到它无效。查看JSON网站和JSONlint工具。您的priceinvestorsevents数组都包含price形式的条目,这是一个无效的对象条目。


原始答案

如果你正在使用jQuery的ajax函数(或getJSON或其他一个包装器),那么应该在你看到它时解析它。如果您必须自己解析JSON字符串,请使用parseJSON。详细说明:

{"active"}及其包装

扩展ajax事情:如果你回来一个字符串并期待一个对象(例如,解析JSON的结果),请确保服务器返回正确的内容类型(“应用程序” / JSON“)。如果您无法控制服务器并且发送回错误的内容类型,则可以通过ajax ajax选项覆盖服务器。

如果它不起作用,您可能需要检查 - JSON真的是valid JSON吗?因为那里有很多不完全JSON。例如,这是有效的JSON:

dataType

这是

{
    "foo": 1,
    "bar": "x"
}

严格的解析器可能会拒绝后者,因为它无效(以几种不同的方式)。

示例 - 正常,服务器配置正确的版本:

{
    foo: 1,
    bar: 'x'
}

示例 - 强制数据类型:

$.ajax({
   url: "yoururl",
   success: function(data) {
       // Here, `data` is already an object if the response was
       // JSON and the server gave the correct content-type
   }
});

$.ajax({
   url: "yoururl",
   dataType: "json",           // <== The new bit
   success: function(data) {
       // Here, `data` is already an object if the response was
       // parseable JSON
   }
});

解析自己的字符串:

$.getJSON("yoururl", function(data) {
   // Here, `data` is already an object if the response was
   // parseable JSON
});

答案 1 :(得分:1)

您的JSON无效。

http://compliantbox.com/mobile/optionsedge/hello.json?jsoncallback=

http://www.jsonlint.com/

这就是解析无效的原因。

正如@Skilldrick在问题评论中指出的那样,你应该在做AJAX时检查控制台并且它不能正常工作;这样做会显示语法错误异常。

答案 2 :(得分:0)

根据您喜欢的页面和随后调用的JSON文件,我会说这可以满足您的需求:

function(data) {
    var lists = data['data']['current_condition'][0];

    var investors = lists['investors'],
        events = lists['events'],
        price = lists['price'];
}