清理 Javascript 中的 JSON:智能删除双引号
Sanitizing JSON in Javascript: smart-removal of double quotes
我从 moleculer.js return 调用中得到一些 JSON,如下所示:
{ "output": "{ \"success\" : { \"msg\" : \"user found\"}}" }
{ "output": "{ \"error\" : { \"msg\" : \"user not found\"}}" }
...尝试解析和深入访问各种 key:value 对是很糟糕的。如果可能的话,我希望能够 'sanitize' JSON 以便它像这样出现:
{ output: { error : { msg : "user not found"} } }
只在引号中保留最后一个值,因为它包含带空格的人类可读文本。然后我可以只使用简单的对象表示法来访问它。像 console.log(output.error.msg)
这样的东西来获取 msg 键的 value/contents。
我在想一些类似 JSON.stringify 的东西-ing 对象然后去掉我不想要的引号,但它看起来很老套并且会包含硬编码参数。我希望在正确的方向上得到一些启发 and/or 提示。一些优雅且可重复使用的东西会很好......想到一个循环,但不确定如何'jump out'一旦我改变了我想要的。
或者,在不对字符进行条带化或转换的情况下直接访问 JSON 的任何技巧也是一件好事。非常感谢。
事实证明,到目前为止(在撰写本文时)找到的最简单的解决方案是将值字符串重新解析回 JSON 并将其连接成新的 JSON。
示例代码:
// call is the original returned data from a microservice:
// { "output": "{ \"success\" : { \"msg\" : \"user found\" } }" }
let returned_output = JSON.parse(call.output)
// gives us: { "success" : { "msg" : "user found" } }
return { "output": returned_output }
// gives us: { "output": { "success" : { "msg" : "user found" } } )
我从 moleculer.js return 调用中得到一些 JSON,如下所示:
{ "output": "{ \"success\" : { \"msg\" : \"user found\"}}" }
{ "output": "{ \"error\" : { \"msg\" : \"user not found\"}}" }
...尝试解析和深入访问各种 key:value 对是很糟糕的。如果可能的话,我希望能够 'sanitize' JSON 以便它像这样出现:
{ output: { error : { msg : "user not found"} } }
只在引号中保留最后一个值,因为它包含带空格的人类可读文本。然后我可以只使用简单的对象表示法来访问它。像 console.log(output.error.msg)
这样的东西来获取 msg 键的 value/contents。
我在想一些类似 JSON.stringify 的东西-ing 对象然后去掉我不想要的引号,但它看起来很老套并且会包含硬编码参数。我希望在正确的方向上得到一些启发 and/or 提示。一些优雅且可重复使用的东西会很好......想到一个循环,但不确定如何'jump out'一旦我改变了我想要的。
或者,在不对字符进行条带化或转换的情况下直接访问 JSON 的任何技巧也是一件好事。非常感谢。
事实证明,到目前为止(在撰写本文时)找到的最简单的解决方案是将值字符串重新解析回 JSON 并将其连接成新的 JSON。
示例代码:
// call is the original returned data from a microservice:
// { "output": "{ \"success\" : { \"msg\" : \"user found\" } }" }
let returned_output = JSON.parse(call.output)
// gives us: { "success" : { "msg" : "user found" } }
return { "output": returned_output }
// gives us: { "output": { "success" : { "msg" : "user found" } } )