使用 javascript 将 JSON 转换为不同的格式
Convert JSON to different format using the javascript
我有 JSON 请看下面,我需要帮助来转换下面提到的格式。我想将数据移动到不同的列(格式如下)
JSON 我有
const data =
[
{
"2":{
"value":1.2
},
"3":{
"values":{
"10.0":1.3
}
},
"4":{
"value":1.6
},
"key":"abc",
"count":2
},
{
"2":{
"value":2.2
},
"3":{
"values":{
"10.0":1.2
}
},
"4":{
"value":5.6
},
"key":"xyz",
"count":22
},
]
我想把上面的格式改成下面的格式:
预期格式
const data =
[
{
col1: "1.2",
col2: "1.3",
col3: "1.6",
col4: "abc",
col5: "2"
},
{
col1: "2.2",
col2: "1.2",
col3: "5.6",
col4: "xyz",
col5: "22"
},
]
我相信这就是您要找的。
我假设只有 value
或 values
属性,而在 values
中您只需要第一个。如果我的假设是正确的,下面是您的代码片段。
const data = [
{
'2': {
value: 1.2,
},
'3': {
values: {
'10.0': 1.3,
},
},
'4': {
value: 1.6,
},
},
{
'2': {
value: 2.2,
},
'3': {
values: {
'10.0': 1.2,
},
},
'4': {
value: 5.6,
},
},
];
const result = data.map((item) => {
return Object.values(item)
.reduce((acc, { value = null, values = null }, index) => {
if (value) return { ...acc, [`col${index + 1}`]: String(value) };
if (values) {
const [firstItem = null] = Object.values(values);
if (firstItem) return { ...acc, [`col${index + 1}`]: String(firstItem) };
}
}, {});
});
console.log(result);
这里有一个解决方案,可以将任意嵌套的 json 输入展平,假设每一列只有一个原始值。它利用了 js 中的数组实际上只是带有数字键的对象这一事实。
const data = [
{
'2': { value: 1.2, },
'3': { values: { '10.0': 1.3, }, },
'4': { value: 1.6, },
},
{
'2': { value: 2.2, },
'3': { values: { '10.0': 1.2, }, },
'4': { value: 5.6, },
},
];
const flattenedValue = value => {
while (typeof value == 'object' && value != null)
for (const v of Object.values(value))
value = v;
return value;
};
const result = data.map(row =>
Object.fromEntries(
Object.values(row).map(flattenedValue).map((v, i) => [`col${i + 1}`, v])
)
);
console.log(result);
我有 JSON 请看下面,我需要帮助来转换下面提到的格式。我想将数据移动到不同的列(格式如下)
JSON 我有
const data =
[
{
"2":{
"value":1.2
},
"3":{
"values":{
"10.0":1.3
}
},
"4":{
"value":1.6
},
"key":"abc",
"count":2
},
{
"2":{
"value":2.2
},
"3":{
"values":{
"10.0":1.2
}
},
"4":{
"value":5.6
},
"key":"xyz",
"count":22
},
]
我想把上面的格式改成下面的格式:
预期格式
const data =
[
{
col1: "1.2",
col2: "1.3",
col3: "1.6",
col4: "abc",
col5: "2"
},
{
col1: "2.2",
col2: "1.2",
col3: "5.6",
col4: "xyz",
col5: "22"
},
]
我相信这就是您要找的。
我假设只有 value
或 values
属性,而在 values
中您只需要第一个。如果我的假设是正确的,下面是您的代码片段。
const data = [
{
'2': {
value: 1.2,
},
'3': {
values: {
'10.0': 1.3,
},
},
'4': {
value: 1.6,
},
},
{
'2': {
value: 2.2,
},
'3': {
values: {
'10.0': 1.2,
},
},
'4': {
value: 5.6,
},
},
];
const result = data.map((item) => {
return Object.values(item)
.reduce((acc, { value = null, values = null }, index) => {
if (value) return { ...acc, [`col${index + 1}`]: String(value) };
if (values) {
const [firstItem = null] = Object.values(values);
if (firstItem) return { ...acc, [`col${index + 1}`]: String(firstItem) };
}
}, {});
});
console.log(result);
这里有一个解决方案,可以将任意嵌套的 json 输入展平,假设每一列只有一个原始值。它利用了 js 中的数组实际上只是带有数字键的对象这一事实。
const data = [
{
'2': { value: 1.2, },
'3': { values: { '10.0': 1.3, }, },
'4': { value: 1.6, },
},
{
'2': { value: 2.2, },
'3': { values: { '10.0': 1.2, }, },
'4': { value: 5.6, },
},
];
const flattenedValue = value => {
while (typeof value == 'object' && value != null)
for (const v of Object.values(value))
value = v;
return value;
};
const result = data.map(row =>
Object.fromEntries(
Object.values(row).map(flattenedValue).map((v, i) => [`col${i + 1}`, v])
)
);
console.log(result);