【问题标题】:How to make a JSON String Valid, if it's not?如果不是,如何使 JSON 字符串有效?
【发布时间】:2014-11-27 07:45:01
【问题描述】:

我需要从其他 API 获取 json 字符串,并且该字符串可能是也可能不是有效的 JSON 字符串。如何检查 JSON 字符串是否有效,如果无效,如何使其有效?我要问的是是否有某些字符需要转义,如果它们没有转义,那么我们在解析时会出错。我们有任何 API 可以使 JSON 字符串有效吗?

我得到了检查 JSON 字符串是否有效的代码

Javascript

if (/^[\],:{}\s]*$/.test('{section : "ABCDEFGHI"JKLMNOP"}'.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
  console.log('valid');
}else{
    console.log('Not a valid');
}

【问题讨论】:

  • “我们有任何 API 可以使 json 字符串有效吗?” 不是内置的。看来您已经知道如何检查它是否有效(since you got the code from here)。那么,它对你的实际问题有效吗?
  • @loangburger 可能,但我需要一种方法使其有效。
  • 使其有效并非易事,因为并不总是有唯一的解决方案。以"foo\c" 为例。它不是有效的 JSON,因为 \c 是无效的转义序列。但我的意思是写 "fooc""foo\\c" 甚至可能是 "foo\nc" 吗?在考虑如何使 JSON 有效之前,您必须想出一些规则。然后你可以实现你自己的解析器来处理它。
  • 然后更改问题的标题以更好地反映您的问题。

标签: javascript json validation


【解决方案1】:

这是一个不平凡的问题。这完全取决于您对“有效” json 的定义。您可以通过转义引号字符并将其视为字符串来将任何字符串转换为有效的 json。例如,

{"foo":"bar

可以变成

{"stringified":"{\"foo\":\"bar"}

它是完全有效的,但它也可能变成

{"foo":"bar"}

{"foo":"barcelona"}

我建议您再看看您的域或在问题中提供特定的问题集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2010-11-14
    • 2013-02-13
    • 2011-07-27
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多