あなたが説明しているのは、JSONに変換できるものではありません。あなたが説明しているのは、確かにオブジェクトへの階層ですが、そこにそれらの中括弧があると、明らかに、はるかに大きなオブジェクトの1つの部分だけを見ていることになります。ただし、パーサーがその文字列をjavascriptオブジェクトに変換するには、次のようにすることができます。
function splitStringToObject(string){
var sourceArray = string.split('.');
var top = {};
var point = top;
while (sourceArray.length){
var work = sourceArray.shift();
if ( /([a-zA-Z_][a-zA-Z0-9_]*)\[([a-zA-Z0-9_]+)\]/.test(work) ){
console.log('found match alpha index')
//found an array identifier with a variable name inside ('bbb[aaa]')
var matches = /([a-zA-Z_][a-zA-Z0-9_]*)\[([a-zA-Z0-9_]+)\]/.exec(work);
var matchName = matches[1];
var matchIndex = matches[2];
point[matchName] = [];
point[matchName][matchIndex] = {};
point = point[matchName][matchIndex];
} else if ( /([a-zA-Z_][a-zA-Z0-9_]*)\[([0-9]+)\]/.test(work) ) {
console.log('found match numeric index')
//found an array identifier with a numeric index inside ('bbb[0]')
var matches = /([a-zA-Z_][a-zA-Z0-9_]*)\[([a-zA-Z0-9_]+)\]/.exec(work);
var matchName = matches[1];
var matchIndex = matches[2];
point[matchName] = [];
point[matchName][matchIndex] = {};
point = point[matchName][matchIndex];
} else if ( work.indexOf('[') > -1 || work.indexOf(']') > -1 ) {
console.log('found bad egg with ' + work)
} else if ( work.indexOf('=') > 0 ) {
console.log('found = inside')
//test for equals sign in the string
var morework = work.split('=');
work = morework[0].trim();
sourceArray.push('='+morework[1])
point[work] = morework[1].trim();
point = point[work];
} else {
console.log('found plain word')
//assume work is aok to use as another object here.
work = work.trim();
point[work] = {};
point = point[work];
}
}
//you may not want this next part
var ret;
//let's pull our value off the top, altho if we do this, I don't know
//how to retain the name. I prefer to return it under top still
for (var k in top){
ret = top[k];
}
console.log(ret);
return ret;
// alternately call
return top;
}
ただし、これは単なるパーサーです。どのように使用しますか?さて、私たちはそれに私たちの文字列を供給する必要があります。次のように、すべての文字列をきちんと配列に入れることができると仮定します。
var strings = [
"AAA.BBB[0].CCC.DDD[1].EEE = 123",
"AAA.BBB[0].CCC.DDD[2].EEE = 123",
"AAA.BBB[0].CCC.DDD[4].EEE = 123",
"AAA.BBB[0].CCC.DDD[5].EEE = 123",
];
そして、次の部分は、ここに示すように、本当に簡単になります。
var objectsConverted = [];
for(var k in strings){
objectsConverted[k] = splitStringToObject(strings[k]);
}
var result = {};
for(var k in objectsConverted){
jQuery.extend(true,result,objectsConverted[k]);
}
console.log(result);
そして、1日の終わりにJSON.stringify(result)を取得すると、次のようになります。
"{"BBB":[{"CCC":{"DDD":[null,{"EEE":"123"},{"EEE":"123"},null,{"EEE":"123"},{"EEE":"123"}]}}]}"
関数の最後にある警告を読んでください。returnメソッドを選択したため、名前空間が失われます(一度下にネストするのではなく、上から戻ってきます)