【发布时间】: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