Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript如何将字符串转换为嵌套对象_Javascript_Arrays_Json_Dictionary_Reduce - Fatal编程技术网

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”的两个答案。就像上面提到的,发烧有两个答案。谢谢勒姆维和卢卡斯。这太棒了,解决了很多问题