// Since 'JSON.stringify' hides 'undefined', the code bellow is necessary in
// order to display the real param that have invoked the error.
JSON.stringify(hash, (k, v) => (v === undefined) ? '__undefined' : v)
.replace(/"__undefined"/g, 'undefined')
8条答案
按热度按时间2izufjch1#
例一:
结果(字符串):
例二:
结果(字符串):
请注意,
undefined
不是有效的JSON,如果您将stringifyWithUndefined()
的结果提供给它,则JSON.parse()
将失败并返回SyntaxError: Unexpected token [...] is not valid JSON
p1iqtdky2#
JSON没有
undefined
值,但我们可以编写一个变通方案:保留嵌套的未定义值
我编写了2个函数,它们在内部使用
JSON.stringify
和JSON.parse
,并使用值占位符保留嵌套的undefined
值:相当于
JSON.stringify
:相当于
JSON.parse
:用法:
可用于对象项和数组项。
缺点是你必须选择一个合适的占位符,它不会被"真实的"源代码值弄错,占位符可以通过可选的
undefinedPlaceholder
参数定制。这对于在浏览器local storage中存储POJO特别有用;)
另见:
wgxvkvu93#
这将导致它打印为
undefined
,但这是无效的json,但却是有效的JavaScript。vx6bjr1n4#
JSON规范不允许
undefined
值,但允许null
值。您可以将replacer函数传递给
JSON.stringify
,以自动将undefined
值转换为null
值,如下所示:这也适用于数组中未定义的值,因为
JSON.stringify
已经将这些值转换为null
。bbuxkriu5#
您可以通过转换为
null
来保留密钥,因为有效的JSON不允许undefined
;简单的一行:
myzjeezk6#
这个应该可以
jc3wubiy7#
使用
null
代替undefined
。a2mppw5e8#
我正在阅读这里的字里行间,猜想您希望在使用JSON.parse时不定义该值?
在这种情况下,您可以使用以下命令:
stringifyAndPreserveUndefined
将对数组中所有未定义的值进行编码,当您调用parseAndRestoreUndefined
时,它将再次将它们放在正确的位置。一个缺点是json看起来和对象不完全一样,在上面的例子中,它会变成
{"ROOT":{"test1":"a","test2":"b","test4":{"test1":"a"}},"undefinedPaths":["ROOT.test3","ROOT.test4.test2"]}