你的问题不太清楚,所以我不得不猜测......你想把后面的所有值都of:
放入一个数组中吗?所以基本上可以如下写带有缩进的原始输入(每个缩进都表示一个新数组)?
here
is
an:example
of:
how:this:works:
foo:bar
example
此外,您的第二个 JSON 示例不正确,of:
数组的内容必须用大括号括起来,因为数组不能有键。
好吧,假设你想得到我上面描述的结果,你可以很容易地用递归做到这一点:
var jsonify = function(input) {
var helper = function(items) {
var end = [];
for (i = 0; i < items.length; ++i) {
var itemparts = items[i].split(':');
var value = itemparts.pop();
var dobreak = false;
while (itemparts.length) {
var obj = {};
if (value == "" && i+1 < items.length) {
// Recursive call
value = helper(items.slice(i+1,items.length));
dobreak = true;
}
obj[itemparts.pop()] = value;
value = obj;
}
end.push(value);
if (dobreak) {
break;
}
}
return end;
};
return helper(input.split('\r\n'));
};
此函数搜索零长度值并检查以下行中是否存在值。如果是这样,则 ( items.slice(...)
) 后面的所有值都使用相同的函数(即递归)单独处理,以将它们放入数组中。
使用上面的示例输入调用jsonify
时,您将获得以下 JSON:
[
"here",
"is",
{
"an": "example"
},
{
"of": [
{
"how": {
"this": {
"works": [
{
"foo": "bar"
},
"example"
]
}
}
}
]
}
]
希望对您有所帮助... ;)