使用嵌套数组将 JSON 转换为逗号分隔的字符串

Posted

技术标签:

【中文标题】使用嵌套数组将 JSON 转换为逗号分隔的字符串【英文标题】:Convert JSON in comma separated string with nested array 【发布时间】:2018-04-24 14:45:35 【问题描述】:

我知道那里有很多例子,但我仍然无法让它发挥作用。我有一个这样的 JSON:

"domiciles":["country":"AF","country":"AX","country":"AL"],"investor":["type":"ii","type":"pi"]

存储在 sessionStorage.getItem("profile");

如何转换成两个逗号分隔的字符串?喜欢...

AF,AX,AL
ii,pi

尝试失败:

var dataResidence = sessionStorage.getItem("profile");
var resultResidence = dataResidence.map(function(val) 
  return val.country;
).join(',');
console.log(resultResidence);

或者:

var newString = "";
for(var i=0; i< dataResidence.domiciles.length;i++)
    newString += userDefinedSeries.country[i];
    newString += ",";

console.log(newString);

【问题讨论】:

【参考方案1】:

你需要解析你从sessionStorage得到的字符串,然后才能映射加入:

var profile = '"domiciles":["country":"AF","country":"AX","country":"AL"],"investor":["type":"ii","type":"pi"]'; // sessionStorage.getItem("profile");

var dataResidence = JSON.parse(profile);

function mapAndJoin(arr, key) 
  return arr.map(function(o) 
    return o[key];
  ).join();


var domiciles = mapAndJoin(dataResidence.domiciles, 'country');

var investor = mapAndJoin(dataResidence.investor, 'type');

console.log(domiciles);

console.log(investor);

【讨论】:

感谢您的帮助!我在徘徊......我还看到了你的第一个版本(没有 mapAndJoin())......通过像 mapAndJoin() 这样的通用函数来做这件事,只是在多个输出的情况下更好的做法......或者还有更多的专业论点? 这是DRY principle - 不要重复你自己。如果您有多个使用相同代码的案例,请将其抽象为一个方法。现在,如果我想将分隔符从逗号更改为斜杠,我可以在一个地方进行更改。此外,处理新的情况非常容易,只需使用不同的参数再次调用该方法即可。我还可以测试抽象,以确保它处理边缘情况,例如空数组、非数组、未找到键等... 很高兴知道...感谢您提供更多信息!【参考方案2】:

一种方法

var obj="domiciles":["country":"AF","country":"AX","country":"AL"],"investor":["type":"ii","type":"pi"];
console.log(JSON.stringify(obj));
var countries = obj.domiciles;
var str = '';
for(i=0;i<countries.length;i++)
if(i != countries.length - 1)
str+= countries[i].country+",";
else
str += countries[i].country;

console.log(str);

var type = obj.investor;
var str1 = '';
for(i=0;i<type.length;i++)
if(i != type.length - 1)
str1 += type[i].type+",";
else
str1 += type[i].type;

console.log(str1);

【讨论】:

以上是关于使用嵌套数组将 JSON 转换为逗号分隔的字符串的主要内容,如果未能解决你的问题,请参考以下文章

无法将逗号分隔的字符串转换为数组

如何将包含逗号分隔的 json 值的单个字符串转换为单个 json 对象?

如何将逗号分隔的字符串转换为数组?

js 将数组转换为逗号分隔的字符串

XSLT 将嵌套的 xml 元素写为一个带有逗号分隔值字符串的元素

如何将逗号分隔的字符串转换为数组? [复制]