我有一个JSON对象,我试图用Javascript来解析它,但是它有点混乱,我不知道实现我所追求的目标的最佳方法。JSON对象如下:
{[null, "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"help"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"help"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}我想要得到的最终结果是值的计数。但是,我也希望将包含在对象中的每个数组中的所有值分开。
到目前为止,我所能达到的最好的结果是:
{
[{"name":"type","value":"mental health"},{"name":"question","value":"prevalence"},{"name":"condition","value":"depression"}]: 2,
[{"name":"type","value":"mental health"},{"name":"question","value":"related issues"},{"name":"condition","value":"depression"}]: 3,
[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]: 7,
[{"name":"type","value":"mental health"},{"name":"question","value":"what is"},{"name":"condition","value":"anxiety"}]: 3,
[{"name":"type","value":"mental health"},{"name":"question","value":"what is"},{"name":"condition","value":"ocd"}]: 2,
[{"name":"type","value":"mental health"},{"name":"question","value":"what is"},{"name":"condition","value":"panic disorder"}]: 6,
[{"name":"type","value":"mental health"},{"name":"question","value":"what is"},{"name":"condition","value":"schizophrenia"}]: 1,
[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]: 8,
null: 19
}然而,我想要了解的最终结果如下:
{
"type": 32,
"mental health": 32,
"question": 32,
"condition": 17,
"prevalence": 2,
"related issues": 3,
"types": 7,
"what is": 20,
"depression": 5,
"anxiety": 3,
"OCD": 2,
"Panic Disorder": 6,
"Scizophrenia": 1,
null: 19
}本质上,我希望计数键/值对中的所有值,但我不确定如何做到这一点,因为对象的结构和空值都是与对象的其他值不同的格式。
发布于 2019-09-05 13:56:14
我冒昧地将您的源数据转换为有效的JS:
const src = [null, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`,`[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]`, `[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`,`[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"help"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`,`[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"help"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`,`[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]`, `[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]`, `[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`,`[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]`, `[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]`, `[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]`, `[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]`, `[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]`, `[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]`, `[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]`, `[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]`, `[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]`, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null];下面是一个非常通用(处理嵌套结构)的解决方案:
// map and parse JSON when applicable
const parsed = src.map( item => {
if ( typeof item === "string" ) {
try {
return JSON.parse(item);
} catch (err) {
return item;
}
} else {
return item;
}
});
function isPlainObj ( obj ) {
return typeof obj == "object" && obj.constructor == Object;
}
function walk ( value, acc ) {
if ( Array.isArray(value) ) {
value.forEach( value => walk(value, acc));
} else if ( value && isPlainObj(value) ) {
Object.values(value).forEach( value => {
walk(value, acc );
});
} else {
acc[value] = (acc[value] || 0) + 1;
}
return acc;
}
const out = parsed.reduce((acc, value) => {
return walk(value, acc);
}, {});
console.log(out);给出
{
null: 18,
type: 39,
'mental health': 37,
question: 25,
'what is': 15,
types: 10,
'...what is': 4,
condition: 12,
phobias: 4,
help: 2,
'...s': 4,
schizophrenia: 4,
'...uses': 2,
depression: 4,
'...ypes': 2
}发布于 2019-09-05 13:53:43
似乎你想要values计数。没有适当的紧张,如果是这样,那么你可以这样做。
const newObj = {};
obj.array.map((r) => {
if (!r) {
(newObj['null']) ? newObj['null'] += 1 : newObj['null'] = 1;
} else {
const subArray = JSON.parse(r);
if (Array.isArray(subArray)) {
subArray.forEach((r) => {
Object.values(r)
.forEach((v) => {
(newObj[v]) ? newObj[v] += 1 : newObj[v] = 1;
})
})
}
}
});
console.log(newObj);发布于 2019-09-05 14:07:49
理想情况下,您希望在源中更改JSON,使其有效。如果失败,这里有一种方法可以从字符串中删除坏字符并对其进行解析。然后,它使用reduce生成一个对象,并对每个可用的对象值进行适当的计数。
const str = '{[null, "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"help"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"help"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"…what is"},{"name":"condition","value":"phobias"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"what is"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"question","value":"types"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…uses"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…s"},{"name":"condition","value":"schizophrenia"}]", "[{"name":"type","value":"mental health"},{"name":"…ypes"},{"name":"condition","value":"depression"}]", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]}';
// Replace the failing quotes
const newstr = str.replace(/"\[|\]"/g, '');
// Remove the first and last characters to make the JSON parse, and parse it
const parsed = JSON.parse(newstr.substr(1, newstr.length - 2));
// `reduce` over the array
const result = parsed.reduce((acc, c) => {
// If the current element isn't null and has a value property
// extract the value and update the initial object
if (c && c.value) {
const { value } = c;
acc[value] = (acc[value] || 0) + 1;
}
// Return the accumulator for the next iteration
return acc;
}, {}); // <= initial object
console.log(result);
https://stackoverflow.com/questions/57806672
复制相似问题