0

wordsオブジェクトのリストをさらに含み、次のように異なる値を持つsJSONオブジェクトを作成したいと思います。e

words = {
    "a1": { s: 1.5, e: 2 },
    "a2": { s: 2.1, e: 2.4 },
    "a3": { s: 2.5, e: 3 },
    "a4": { s: 3.5, e: 3.8 },
    "a5": { s: 3.9, e: 4.5 },
    "a6": { s: 4.8, e: 5.2 },
    "a7": { s: 5.3, e: 5.3 },
    "a8": { s: 6.5, e: 7 },
    "a9": { s: 7.2, e: 8 },
    "a10": { s: 8.1, e: 8.4 }
};

forループを使用してこれらの値を追加する必要があります。これには次のソリューションを適用しました。

var words = {};
var xyz = [1.5,2,2.1,2.4,2.5,3,3.5,3.8,3.9,4.5,4.8,5.2,5.3,5.3,6.5,7,7.2,8];
words = '{';
for (var i = 0; i <= 10; i++) {
    if (i == 10)
        var obj = '\"a' + i + '\"'+': { s:' + xyz[i] + ', e:' + xyz[i + 1] + '}';
    else
        var obj = '\"a' + i + '\": { s:' + xyz[i] + ', e:' + xyz[i + 1] + '},';

    words = words + obj;
}
words = words + '}';

$.parseJSON(words);

ただし、これにより次のエラーが生成されます。

キャッチされていない SyntaxError: 予期しないトークン s**

これにより、オブジェクトを作成できません。

4

2 に答える 2

4

JSON 文字列を作成してから JS で解析する必要はありません。これを使用すると、はるかに簡単に実行できます。

var words = {},
    xyz = [1.5,2,2.1,2.4,2.5,3,3.5,3.8,3.9,4.5,4.8,5.2,5.3,5.3,6.5,7,7.2,8];

for (var i = 0, l = xyz.length/2; i < l; i++) {
  words['a' + (i + 1)] = { 
    s: xyz[2*i], 
    e: xyz[2*i + 1] 
  };
}

console.log(words);

words説明: ソース配列を調べて、各ペアをオブジェクト リテラルに取り、それをブラケット表記でオブジェクトに割り当てます (値が'a' + (i+1)新しいキーとして評価されるように)。

于 2012-12-20T15:11:17.160 に答える
1

基本的に、ブラウザーで手動で JSON 文字列を作成する理由はありません。代わりに、オブジェクトを作成してから使用JSON.stringifyします。(ほとんどのブラウザーにはデフォルトで含まれていますが、そうでない場合は shim を追加できます。) たとえば、次のようになります。

var counter;
var words = {};
var xyz = [1.5,2,2.1,2.4,2.5,3,3.5,3.8,3.9,4.5,4.8,5.2,5.3,5.3,6.5,7,7.2,8];
var i;
counter = 0;
for (i = 0; i < xyz.length; i += 2) {
    ++counter;
    words["a" + counter] = {s: xyz[i], e: xyz[i + 1]};
}
console.log("words (before stringify):", words);
words = JSON.stringify(words);
console.log("words (after stringify):", words);

JSON を手動で作成する場合は、そのルールを学び、従う必要があります。たとえば、キーは二重引用符で囲む必要があります (つまり、 で"s": ...はありませんs: ...)。

于 2012-12-20T15:12:15.637 に答える