尝试了一些现有的模块,都不太好用,干脆自己又造了个轮子。欢迎试用
GitHub 地址: https://github.com/xcatliu/awesome-json2json
An awesome json to json mapper
import json2json from 'awesome-json2json';
// const json2json = require('awesome-json2json').default;
json2json({ foo: { bar: { baz: 1 }}}, {
new_foo: 'foo.bar.baz'
});
// { new_foo: 1 }
json2json({ foo: { bar: { baz: 1 }}}, {
new_foo: 'foo.not_exist_key?.bar.baz'
});
// { new_foo: undefined }
json2json({ foo: { bar: { baz: 1 }}}, {
new_foo: (root) => {
return root.foo.bar.baz + '_formatted';
}
});
// { new_foo: '1_formatted' }
json2json({ foo: { bar: { baz: 1 }}}, {
new_foo: {
$path: 'foo.bar',
$formatting: (bar) => {
return bar.baz + '_formatted';
}
}
});
// { new_foo: '1_formatted' }
json2json({ foo: { bar: { baz: 1 }}}, {
new_foo: {
$path: 'foo',
new_bar: 'bar.baz'
}
});
// { new_foo: { new_bar: 1 }}
json2json({ foo: { bar: { baz: 1 }}}, {
new_foo: {
$path: 'foo',
$formatting: (foo) => {
return {
baz2: foo.bar.baz + '_formatted'
}
},
new_bar: 'baz2'
}
});
// { new_foo: { new_bar: '1_formatted' }}
json2json({ foo: { bar: { baz: 1 }}}, {
new_foo: {
$path: 'foo',
new_bar: {
$path: 'bar',
new_baz1: 'baz',
new_baz2: '$root.foo'
}
}
});
// new_foo: {
// new_bar: {
// new_baz1: 1,
// new_baz2: {
// bar: {
// baz: 1
// }
// }
// }
// }
json2json({
foo: [
{ bar: 1 },
{ bar: 2 },
{ bar: 3 }
]
}, {
new_foo: 'foo[].bar'
});
// { new_foo: [1, 2, 3] }
json2json({
foo: [
{ bar: 1 },
{ bar: 2 },
{ bar: 3 }
]
}, {
new_foo: {
$path: 'foo[].bar',
$formatting: (barValue) => barValue + '_formatted'
}
});
// {
// new_foo: [
// '1_formatted',
// '2_formatted',
// '3_formatted'
// ]
// }
json2json({
foo: [
{ bar: 1 },
{ bar: 2 },
{ bar: 3 }
]
}, {
new_foo: {
$path: 'foo[]',
new_bar: {
$formatting: (fooItem) => {
return fooItem.bar;
}
}
}
});
// {
// new_foo: [
// { new_bar: 1 },
// { new_bar: 2 },
// { new_bar: 3 }
// ]
// }
1
natforum 2018-04-10 02:18:44 +08:00 1
这个猫头是 mobi.css 的作者吧,印象比较深,mark
|
3
lcj2class 2018-04-10 21:06:43 +08:00
好奇什么场景下会用到这种转化,之前没用过。
|
4
sunwei0325 2018-04-11 08:53:32 +08:00 1
|
6
xcatliu OP @sunwei0325 看上去不错啊,先收藏了
|
8
xcatliu OP @horizon 会 throw error
如果不希望 throw error,可以使用 Optional chaining foo.bar?.baz https://github.com/xcatliu/awesome-json2json#optional-chaining |
9
xiaket 2018-08-09 08:22:02 +08:00 1
这个需求的通用解决方案是 jq, 不过 jq 的那个 jmespath 实在太恶心人了.......
|
10
ligyxy 2018-08-10 08:05:20 +08:00 via Android 1
|