我在做动态的参数时碰到了字符串转层级JSON问题(“.”表示对象关系,“[”表示数组关系)。
// 例: 键“a.b.c”,值“one” ——> {"a":{"b":{"c":"one"}}}
// 例: 键“a[b[c”,值“two” ——> {"a":[{"b":[{"c":"two"}]}]}
以上转化用了一段时间解决了,但却碰到了有“a[b.c”和“a.b[c”等情况,网上查了一堆,牛头不对马嘴,也可能是我表达不清楚而查不到,因此特来请教。
无思路,但想到的都试过了。
例:
// 键“a[b.c”,值“one” ——> {"a": [{"b": {"c": "one"}}]}
// 键“a.b[c”,值“two” ——> {"a": {"b": [{"c": "two"}]}}
注解:不知道上述问题我表达是否清楚了,大概就是字符串出现“.”和“[”混合使用时不知如何转。
js代码如下,题主可以按照下面的模式用java写一遍,依次遍历字符,然后提前取一下个字符判断是点还是[进行相关操作
function getJSONStr(s,value) {
var pre = [], end = [];
for (var i = 0; i < s.length; i++) {
var c = s.charAt(i);
var next = i + 1 < s.length ? s.charAt(i + 1) : null;
if (c != '[' && c != '.') {
if (next == null) pre.push(`{"${c}":"${value}"}`);
else {
if (next == '.') { pre.push(`{"${c}":`); end.unshift('}') }
else {
pre.push(`{"${c}":[`); end.unshift(']}')
}
}
}
}
return pre.join('') + end.join('')
}
console.log(getJSONStr('a.b.c.d.e.f', 'one'))
console.log(getJSONStr('a[b.c', 'one'))
console.log(getJSONStr('a.b[c', 'two'))
console.log(getJSONStr('a.b[c.d', 'three'))
console.log(getJSONStr('a[b.c.d[e', 'four'))
补充一下,字符串中字符不仅仅就三个,可能会有“a.b[c.d”和“a[b.c.d[e”等情况
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!