JavaScript如何将字符串转换为嵌套对象
我有一个如下的响应字符串:JavaScript如何将字符串转换为嵌套对象,javascript,arrays,json,dictionary,reduce,Javascript,Arrays,Json,Dictionary,Reduce,我有一个如下的响应字符串: |||COVID HPI^^^FEVER^^^Low Grade |||COVID HPI^^^FEVER^^^Continuous |||COVID HPI^^^RHINORRHEA/SNEEZING^^^No |||GENERAL EXAM^^^CL^^^Conscious |||GENERAL EXAM^^^ORIENTED^^^Yes { "COVID HPI": [ { "FEVER": &q
|||COVID HPI^^^FEVER^^^Low Grade
|||COVID HPI^^^FEVER^^^Continuous
|||COVID HPI^^^RHINORRHEA/SNEEZING^^^No
|||GENERAL EXAM^^^CL^^^Conscious
|||GENERAL EXAM^^^ORIENTED^^^Yes
{
"COVID HPI": [
{
"FEVER": "Low Grade, Continuous",
"RHINORRHEA/SNEEZING": "Yes"
}
],
"GENERAL EXAM": [
{
"CL": "Conscious",
"ORIENTED": "Yes"
}
]
}
我想把它转换成这样的东西:
|||COVID HPI^^^FEVER^^^Low Grade
|||COVID HPI^^^FEVER^^^Continuous
|||COVID HPI^^^RHINORRHEA/SNEEZING^^^No
|||GENERAL EXAM^^^CL^^^Conscious
|||GENERAL EXAM^^^ORIENTED^^^Yes
{
"COVID HPI": [
{
"FEVER": "Low Grade, Continuous",
"RHINORRHEA/SNEEZING": "Yes"
}
],
"GENERAL EXAM": [
{
"CL": "Conscious",
"ORIENTED": "Yes"
}
]
}
如果没有一个丑陋的代码,我无法超越这一点:
const na = [];
fetch('http://localhost/test/json/newdata.json')
.then(response => {
let vv = response.json();
return vv;
})
.then(function(data){
console.log(data[0]['tRxVal'])
let nav = data[0]['tRxVal'].slice(3).split('|||');
let nbv = nav.map(function(item,i){
return item.split('^^^');
});
//console.log(nbv);
nbv.forEach(function(v,i){
if(!na.includes(v[0])){
na.push(v[0]);
}
})
console.log(na)
})
.catch(err => {
// handle errors
});
有人能帮我吗
谢谢您应该尝试使用拆分功能。
可以对| | | |的字符串进行第一次拆分,然后可以拆分^^^的所有结果字符串,以便可以拆分键和值
类似的东西,把它当作伪代码
let strings = data.split("|||");
for (string in strings){
let objectKeyValue = string.split("^^^");
let object = objectKeyValue[0];
let key = objectKeyValue[1];
let value = objectKeyValue[2];
}
从这里开始,组成你的对象,你就可以开始了
您应该尝试使用split函数。
可以对| | | |的字符串进行第一次拆分,然后可以拆分^^^的所有结果字符串,以便可以拆分键和值
类似的东西,把它当作伪代码
let strings = data.split("|||");
for (string in strings){
let objectKeyValue = string.split("^^^");
let object = objectKeyValue[0];
let key = objectKeyValue[1];
let value = objectKeyValue[2];
}
从这里开始,组成你的对象,你就可以开始了
按| | |拆分以获取每一行,然后按^^^拆分每一行。然后,你可以这样想每一行:^^^^^。使用每一行的心智模型来构建周围的对象
常量字符串=`| | |新冠病毒HPI^^^^^^发热^^^低度
|||新冠病毒HPI持续发热
|||新冠病毒HPI^^^鼻漏/打喷嚏^^^^否
|||普通考试
|||普通考试^^^^^^^面向^^^是`;
函数stringToObjstr{
常量分支=str.split'| | |';
常量obj={};
branchs.forEachbranch=>{
const leaves=branch.split'^^^';
常量[上、下、答案]=叶;
如果顶部{
如果!obj[top]obj[top]={};
const trimmedAnswer=answer.trim;
const curr=obj[top][sub];
假币{
obj[top][sub]=`${curr},${trimmedAnswer}`;
}否则{
obj[top][sub]=答案.trim;
}
}
};
返回obj;
}
console.logstringToObjstring 按| | |拆分以获取每一行,然后按^^^拆分每一行。然后,你可以这样想每一行:^^^^^。使用每一行的心智模型来构建周围的对象
常量字符串=`| | |新冠病毒HPI^^^^^^发热^^^低度
|||新冠病毒HPI持续发热
|||新冠病毒HPI^^^鼻漏/打喷嚏^^^^否
|||普通考试
|||普通考试^^^^^^^面向^^^是`;
函数stringToObjstr{
常量分支=str.split'| | |';
常量obj={};
branchs.forEachbranch=>{
const leaves=branch.split'^^^';
常量[上、下、答案]=叶;
如果顶部{
如果!obj[top]obj[top]={};
const trimmedAnswer=answer.trim;
const curr=obj[top][sub];
假币{
obj[top][sub]=`${curr},${trimmedAnswer}`;
}否则{
obj[top][sub]=答案.trim;
}
}
};
返回obj;
}
console.logstringToObjstring;谢谢你,卢卡斯。这很好,而且越来越近了。但它遗漏了“sub”的两个答案。就像上面提到的,发烧有两个答案。谢谢勒姆维和卢卡斯。这太棒了,解决了很多问题。这很好,而且越来越近了。但它遗漏了“sub”的两个答案。就像上面提到的,发烧有两个答案。谢谢勒姆维和卢卡斯。这太棒了,解决了很多问题