javascript - 在javascript中的json中获取方括号而不是花括号
问题描述
如果我想在 elasticsearch 脚本中更新对象,那么我需要发送一些奇怪的 JSON 修改(https://discuss.elastic.co/t/updating-an-object-field/110735/2)。我真的不知道那是什么语言,也不知道他们为什么要这样做。
例如,如果输入是
{"id": 2, "name": "John"}
我需要 javascript 中的方法来实现它
["id": 2, "name": "John"]
第一个 sloultion 将是
standardJson.replace('{', '[').replace('}', ']')
但是,我担心值内的大括号,因此上述解决方案将覆盖
"name": "{John"
至
"name": "[Jonh"
我不希望那样。事实上,我需要这个在通用目的库中,所以我不能只希望这种情况不会发生。
解决方案
基于使用Object.entries和Array.prototype.map解析输入对象的显式方法:
const inputData = { "id": 2, "name": "{John}" };
const parsed = `[` +
Object.entries(inputData)
.map(v =>
`"${v[0]}": ` +
(typeof v[1] === `string` ? `"${v[1]}"` : v[1])
)
.join(`, `) +
`]`;
console.log(parsed); // ["id": 2, "name": "{John}"]
要处理嵌套对象,可以使用附加的解析分支递归地运行该过程:
const inputData = { "id": 2, "name": "{John}", "foo": { "bar": "{zoo}" } };
const parse = (data) => `[` +
Object.entries(data)
.map(v =>
`"${v[0]}": ` + (
typeof v[1] === `string`
? `"${v[1]}"`
: (
typeof v[1] === "object"
? parse(v[1])
: v[1]
)
)
)
.join(`, `) +
`]`;
console.log(parse(inputData));
// ["id": 2, "name": "{John}", "foo": ["bar": "{zoo}"]]
嵌套数组也可以用同样的方法处理,只需要再增加1个条件分支。
推荐阅读
- javascript - 更新数组反应钩子中数组的状态 onChange
- if-statement - 创建嵌套 if 语句。如果单元格 K2 或 D2 在
- python - 将多个蜘蛛的输出捕获到单个输出文件/变量中的正确“抓取”方式是什么?
- powershell - 枚举给定 ProgID 的 COM 对象公开的方法和属性
- java - 如何在android应用程序中删除全屏模式
- ajax - 通过 sente web-socket 通道对应该是单个请求的不间断请求
- python - 如何在 Python 中使用 Paramiko 连接到公共 FTP 服务器?
- javascript - Vanilla JavaScript for-of 循环不会完成所有迭代
- deep-learning - 损失之间的权衡?
- c++ - 未解析的外部使用 fmt::format 返回 std::wstring