【问题标题】:What is wrong with my JSON data?我的 JSON 数据有什么问题?
【发布时间】:2016-05-22 21:44:17
【问题描述】:

我正在构建一个 JSON 对象,所以我可以将数据库查询的结果推送到其中,然后返回填充的 JSON 数据。但是从一开始就遇到了问题。

这是我当前的代码:

//var AppenateResString = {name:"777"};

var AppenateResString = {
  "DataSources": [{
    "Id": "TEST",
    "Rows": [
      ["10011", "10011 - Test Generic Project"]
    ],
    "NewRows": [],
    "DeletedRows": []
  }],
  "LastUpdated": ""
};

var AppenateResBody = JSON.parse(AppenateResString);
response.body = JSON.stringify(AppenateResBody);

但这是我得到的错误:

JavaScript Error: SyntaxError: invalid character 'o' looking for beginning of value
    at 
<anonymous>:21:23
--
};

var AppenateResBody = JSON.parse(AppenateResString);
                      ^ Error!

我已经把它缩小到我的 JSON 布局有问题..或者我如何构建 JSON 对象..或者一些基本的,“这就是你做 JSON 的方式”之类的事情。但我想不通。

有什么想法吗?

附:如您所见,我已经注释掉了我认为构建的非常简单的 JSON 对象。它同样失败。

【问题讨论】:

  • 那不是 json。这只是一个常规的 javascript 变量分配。不需要解析任何东西,因为当整个 &lt;script&gt; 块被 javascript 引擎解析时,“json”被解析了。如果你想要实际的 json 并且真的想解析它,那么你需要将 json 分配为一个字符串:var foo = 'json_goes_here';
  • 由于这只是实际 javascript 对象/数组数据的变量赋值,您可能会得到一个神奇的“字符串化”版本,即文本 [object Object],这是无效的JSON 术语中的数组定义,因此 unexpected o

标签: javascript mysql json


【解决方案1】:

你只是把事情复杂化了。您不需要 JSON.parse 对象。它已经是你需要的格式了。

    <script type="text/javascript">
var AppenateResString = {
  "DataSources": [{
    "Id": "TEST",
    "Rows": [
      ["10011", "10011 - Test Generic Project"]
    ],
    "NewRows": [],
    "DeletedRows": []
  }],
  "LastUpdated": ""
};

response.body = JSON.stringify(AppenateResString);
    </script>

【讨论】:

    【解决方案2】:

    这是一个javascript对象

    var AppenateResString = {
      "DataSources": [{
        "Id": "TEST",
        "Rows": [
          ["10011", "10011 - Test Generic Project"]
        ],
        "NewRows": [],
        "DeletedRows": []
      }],
      "LastUpdated": ""
    };
    

    如果你想要它作为一个 JSON 字符串然后

    var str = JSON.stringify(AppenateResString);
    

    如果您希望 JSON 字符串返回一个 javascript 对象,那么

    var obj = JSON.parse(str);
    

    【讨论】:

    • 谢谢。这里有很多很好的答案,但这个答案的措辞让我很满意。现在终于更有意义了,一起摆脱了解析,现在可以像我想要的那样将它用作对象。将执行 JSON.stringify() 只是为了将其放回“JSON 数据”以作为我的响应发送。
    【解决方案3】:

    您试图在已经是一个对象的东西上调用JSON.parse,这就是您收到错误的原因。

    出现invalid character 'o' looking for beginning of value 的错误消息是因为它实际上是在尝试解析单词“object”而不是实际的数据结构。

    【讨论】:

      【解决方案4】:
      var AppenateResBody = AppenateResString;
      

      代替

      var AppenateResBody = JSON.parse(AppenateResString);
      

      这是一个对象

      见下文:

      I keep getting "Uncaught SyntaxError: Unexpected token o"

      【讨论】:

        【解决方案5】:

        AppenateResString 根本不是 JSON。它是一个 JavaScript 对象(而不是字符串)。

        JSON 是一种序列化格式。如果你在 JavaScript 中有任何,那么它将被表示为一个字符串。

        【讨论】:

          猜你喜欢
          • 2010-11-09
          • 2021-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-15
          • 2017-12-27
          相关资源
          最近更新 更多