【问题标题】:Trouble parsing JSON generated from Node.js and MySQL [duplicate]无法解析从 Node.js 和 MySQL 生成的 JSON [重复]
【发布时间】:2018-05-17 17:41:17
【问题描述】:

大家好,

我目前在尝试从服务器响应中解析 JSON 时遇到问题。我是客户端/应用程序端程序员,我们有一个服务器程序员负责创建 JSON。所以我不太了解 JSON 以及它们是如何生成它们的。

我正在使用内置的 JSON 实用程序在 Unity(游戏引擎)中解析 JSON。我一直在谷歌搜索,可能有一些不同的 JSON 变体,所以我不确定是否需要一个可以解析我拥有的特定 JSON 的 3rd 方库。

你熟悉下面这种类型的 JSON 吗?

[
  {
    "id": 221,
    "builder_count": 1,
    "units": "[{\"count\": 1, \"level\": 1, \"type_id\": 1, \"unit_id\": \"2359-1\", \"research_time\": 0, \"research_complete\": 1}],[{\"count\": 5, \"level\": 1, \"type_id\": 11, \"unit_id\": \"2359-11\", \"research_time\": 0, \"research_complete\": 1}],[{\"count\": 5, \"level\": 1, \"type_id\": 2, \"unit_id\": \"2359-2\", \"research_time\": 0, \"research_complete\": 1}]"
  }
]

Units 键似乎有点不对劲,尽管它们实际上是一个对象,但它们被视为字符串。

我可以访问服务器代码,这就是生成 Key:Units 的方式。 (整个代码块很大,所以我只是选择这部分作为示例,如果我需要发布生成整个 JSON 的整个函数,请告诉我)

    '    (SELECT CAST(GROUP_CONCAT ( ' +
    '       JSON_ARRAY( ' +
    '           JSON_OBJECT( ' +
    '               "unit_id", tu.unique_id, ' +
    '               "type_id", tu.unit_type_id, ' +
    '               "level", tu.level, ' +
    '               "research_time", tu.research_time, ' +
    '               "research_complete", tu.research_complete, ' +
    '               "count", tu.tally ' +
    '               )' +
    '           )' +
    '       ) AS CHAR)' +
    '     FROM api_TurfUnits tu WHERE tu.turf_id = t.id) AS units, '

我们使用的服务器技术是 Node.js 和 AWS Aurora (MySQL)。

基本上我正在寻找一个可能能够正确解析 JSON 类型的库(键:单位)

我使用了https://jsonformatter.curiousconcept.com/ 网站并尝试了所有不同的 JSON 标准,但似乎没有一个无法解析它。

【问题讨论】:

  • they are being treated as a string even though they are really not. - 不,他们真的是
  • this type of JSON - 什么?不解析的JSON?这就是所谓的无效JSON,在堆栈溢出问题中很常见
  • 我的意思是,例如 JSON 示例中的“buildings”键在我解析它时被视为字符串。但是字符串值实际上是一个对象,解析器似乎无法识别这一点。这可能是 JSON 生成方式的问题吗?
  • json 解析不是递归的......但是,您提供的 JSON 无论如何都不会解析 - 但如果它解析了,看起来 "buildings" 等实际上是 JSON 字符串,在包含对象......任何产生“JSON”的东西都做错了,或者不像你预期的那样
  • 如果我将您问题中的 OBJECT 分配给 x,那么,typeof x[0].buildings === "string" ... 和 JSON.parse(x[0].buildings) 会产生一个数组 ... 所以,正如我所怀疑的,建筑物是 JSON.stringify(或等效)的结果,然后将其添加到 JSON.stringify'd 对象中......您需要修复创建 JSON 的代码

标签: javascript mysql json node.js unity3d


【解决方案1】:

JSON.parse 将满足您的大部分需求。

如果您使用request 库,则可以选择将其预解析为 json。

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2016-01-27
    • 2020-06-17
    相关资源
    最近更新 更多