【发布时间】:2019-12-12 12:17:14
【问题描述】:
除了字符串和数字之外,有效的 JSON 还可以包含特殊值,例如 null 和 false
我需要解析由某些 API 生成的 JSON,其中还包含 undefined。然而,undefined 是一个 valid JavaScript value,但它不是一个有效的 JSON 值,每当我解析它时,它都会返回一个词法错误。
示例:
library(jsonlite)
# A string works
"[{\"Sepal.Width\":\"3.5\"}]" %>% fromJSON
# Sepal.Width
# 3.5
# A number works
"[{\"Sepal.Width\":3.5}]" %>% fromJSON
# Sepal.Width
# 3.5
# null works
"[{\"Sepal.Width\": null}]" %>% fromJSON
# Sepal.Width
# NA
# false works
"[{\"Sepal.Width\": false}]" %>% fromJSON
# Sepal.Width
# FALSE
# undefined does not work
"[{\"Sepal.Width\": undefined}]" %>% fromJSON
Error: lexical error: invalid char in json text.
[{"Sepal.Width": undefined}]
(right here) ------^
问题:
是否有任何(可靠的)方法来解析包含 undefined 值的 JSON?如果没有,修复这个错误 JSON 的最佳方法是什么?
尝试:
我曾考虑过简单地 gsubbing undefined,但这样做有风险,因为该词很容易出现在 JSON 字符串值中。
【问题讨论】:
-
由于
undefined不是一个有效的 JSON 值,您不太可能找到将其视为一个的解析器。首先,您是如何在 JSON 中获取undefined的? -
@SymbolixAU 我试图解析的一些 JSON 中有一个错误,它导致(无效的)
undefined出现在其他有效的 JSON 中。我尝试克隆 jsonlite 源并进行调整,以便undefined可以被解析为布尔值或null,但我并没有走得太远。 Here 是无效 JSON 的来源。 -
@user5783745 您的 JSON 生成器很可能有问题。
-
@Ḿűỻịgǻṇạcểơửṩᛗ 我知道。虽然这不是我的 API。我只是试图解析它产生的响应(我无法控制响应以及 JSON 的有效性,我只能控制如何解析响应)。其他人指出响应不是有效的 JSON,我完全理解。我认为最好的解决方案是将响应读取为文本并将
undefined替换为false。不过这是有风险的,因为它可能会更改实际的字符串值(例如,如果'undefined' 出现在JSON 的字符串值中)。 -
@Ḿűỻịgǻṇạcểơửṩᛗ 请参阅here
标签: javascript r json undefined jsonlite