如何正确读取json字符串

时间:2017-06-22 18:57:38

标签: javascript html json

我正在尝试读取json字符串并在html页面上输出某些字段,我收到此错误“SyntaxError:JSON.parse:JSON数据第1行第2列的意外字符” 这是我发送的json。

{
  "Order0" : {
    "user" : "Name",
    "products" : [ {
      "discription" : "freddo",
      "productName" : "sketo",
      "price" : 22.3,
      "id" : 1
    }, {
      "discription" : "frape",
      "productName" : "glyko",
      "price" : 22.3,
      "id" : 1
    }, {
      "discription" : "cappouchino",
      "productName" : "sketo",
      "price" : 22.3,
      "id" : 1
    } ],
    "id" : 0,
    "date" : null,
    "temp" : "Get"
  },
  "Order1" : {
    "user" : "Name",
    "products" : [ {
      "discription" : "freddo",
      "productName" : "sketo",
      "price" : 22.3,
      "id" : 1
    }, {
      "discription" : "frape",
      "productName" : "glyko",
      "price" : 22.3,
      "id" : 1
    }, {
      "discription" : "cappouchino",
      "productName" : "sketo",
      "price" : 22.3,
      "id" : 1
    } ],
    "id" : 0,
    "date" : null,
    "temp" : "Get"
  }
}

提前谢谢你。 [编辑]

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script>
            var nIntervId;
            function fun() {
                nIntervId = setInterval(proxy, 2 * 1000);
            }
            function proxy() {
              $.getJSON('events', function(data) {
                var obj = JSON.parse(data);
                console.log(obj.toString());
              });
            }
            function stop() {
                clearInterval(nIntervId);
            }
        </script>

    </head>
    <body onload="fun();">
       <div id="data"></div>
    </body>
</html>

这是处理Json的代码 [EDIT2] 与window.alert(JSON.stringify(data)); 我得到了我想要的字符串,但我如何获得某些字段?

1 个答案:

答案 0 :(得分:3)

where($data[$field])会自动解析字符串,因此$.getJSON已经是一个对象,再次调用data会导致错误。

来自jQuery docs:

  

成功回调传递返回的数据,通常是a   由JSON结构定义并解析的JavaScript对象或数组   使用$ .parseJSON()方法。它也传递了文本状态   回应。

来源:http://api.jquery.com/jquery.getjson/

要访问对象中的数据,可以使用点表示法。查看上面使用的示例是一个示例:

parse

您也可以使用括号访问它:

var user = data.Order0.user;
// user variable now holds the string "Name"

要获得产品,您可以使用相同的语法,但由于产品是一个数组,您需要通过索引或循环遍历值来访问它。

指数:

var user = data["Order0"]["user"];

循环:

var order0products = data.Order0.products;
var product1 = order0products[0];
var price = product1.price;
// The price variable now holds the value 22.3