【问题标题】:How to properly read a json string如何正确读取 json 字符串
【发布时间】:2017-11-26 04:53:00
【问题描述】:

我正在尝试读取 json 字符串并在 html 页面上输出某些字段,但出现此错误:

语法错误:JSON.parse:第 1 行第 2 列出现意外字符 JSON 数据

这是我要发送的 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"
  }
}

提前致谢。
[编辑]
这是处理 json 的代码。

<!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>

[EDIT2]

我正在使用window.alert(JSON.stringify(data)); 获得我想要的字符串,但我如何获得某些字段??

【问题讨论】:

  • 呈现的 JSON 没有任何问题。你确定那是你的浏览器得到的 JSON 吗?尝试调试您的代码并确保。如果您需要这方面的帮助,您需要出示该代码。
  • 您分享的代码没有问题。在你创建它和你试图解析它之间一定有什么东西在破坏它。您需要提供minimal reproducible example 来演示问题。
  • 您的对象没有问题。你打电话给JSON.parse(string) 还是JSON.stringify(object)
  • 是的,因为对象上的 toString 返回对象 Object。 toString 返回“[object type]”,其中 type 是对象类型如果你想把那个 json 对象变成一个字符串,你需要调用JSON.stringify(data)

标签: javascript html json


【解决方案1】:

$.getJSON 自动解析字符串,因此data 已经是一个对象,再次调用parse 会引发错误。

来自 jQuery 文档:

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

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

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

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

循环:

var order0products = data.Order0.products;
var length = order0products.length;
for (var index = 0; index < length; index++) {
    console.log(order0products.price);
}
// You will see each products price for order0 in your console.

【讨论】:

  • 是的,非常感谢您,但我将如何获得产品? @无神论者P3ace
  • @SinSor 通过访问产品的示例更新了答案。
  • 是的,我得到了价格,谢谢您的详细解释!
  • 没问题!祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
相关资源
最近更新 更多