JavaScriptを介して動的にJSONオブジェクトを作成(連結文字列なし)


130

私はこのJSONデータを持っています:

{
    "employees": [
        {
            "firstName": "John",
            "lastName": "Doe"
        },
        {
            "firstName": "Anna",
            "lastName": "Smith"
        },
        {
            "firstName": "Peter",
            "lastName": "Jones"
        }
    ]
}

従業員の列と行の数がわからない場合、JavaScriptでこのオブジェクトを作成するにはどうすればよいですか(連結文字列なし)。「onGeneratedRow」メソッドで各行を取得し、各列(firstName、lastName)を '{}'ブラケットにプッシュする必要があると想定します。

var viewData = { 
    employees : [] 
};

var rowNum = -1; 

function onGeneratedRow(columnsResult)
{
    rowNum = rowNum + 1;
    viewData.employees.push({});    
    columnsResult.forEach(function(column) {                  
    var columnName = column.metadata.colName;
    viewData.employees[rowNum][columnName] = column.value;  });
}

1
なにcolumnsResult?なにmetadata
georg 2013年

1
現在、この質問は私には意味がありません。データをどこから、どのような形式で取得しているか、詳しく説明していただけますか。既存のデータに追加するだけですか、それとも最初からすべて作成しますか?たぶん、あなたはjsfiddleを作成して、あなたが抱えている問題が何であるかを示すことができます。そして、データ、JSONまたはJavascriptオブジェクトについて明確にしましょう:stackoverflow.com/questions/8294088/javascript-object-vs-json
Xotic750

2
「columnName」が「firstName」であり、「column.value」が値であると仮定します(例:「John」)。それらを括弧( '{}')に動的にプッシュする方法を知る必要があるだけです
ohadinho

1
表示したコードを実行するとどうなりますか?
nnnnnn 2013年

@ohadinho入力データ構造(json)が不明columnsResult
KamilKiełczewski19年

回答:


154

これはあなたが必要とするものです!

function onGeneratedRow(columnsResult)
{
    var jsonData = {};
    columnsResult.forEach(function(column) 
    {
        var columnName = column.metadata.colName;
        jsonData[columnName] = column.value;
    });
    viewData.employees.push(jsonData);
 }

OPが「rowNum」で行をカウントする必要がないことをどのようにして知りましたか?
Xotic750 2013年

1
プッシュは行番号を必要としません
Waqar Alamgir 2013年

json生成はカウントを必要としないため、行を取得するために常に.lengthを使用できます。
Waqar Alamgir 2013年

5
JSON生成がそうであると言ったことはありません。「これはあなたが必要なものです!」あなたの答えはJSON btwを生成しません。
Xotic750 2013年

1
@WaqarAlamgir-それはまさに私が現時点で必要なものです。乾杯!
bob.mazzo 2014年

96

おそらく、この情報が役立つでしょう。

var sitePersonel = {};
var employees = []
sitePersonel.employees = employees;
console.log(sitePersonel);

var firstName = "John";
var lastName = "Smith";
var employee = {
  "firstName": firstName,
  "lastName": lastName
}
sitePersonel.employees.push(employee);
console.log(sitePersonel);

var manager = "Jane Doe";
sitePersonel.employees[0].manager = manager;
console.log(sitePersonel);

console.log(JSON.stringify(sitePersonel));


10

このトピック、特にXotic750の答えは私にとって非常に役に立ちました。ajaxを使用してphpスクリプトに渡すjson変数を生成したいと思いました。私の値は2つの配列に格納されており、json形式でそれらが必要でした。これは一般的な例です:

valArray1 = [121, 324, 42, 31];
valArray2 = [232, 131, 443];
myJson = {objArray1: {}, objArray2: {}};
for (var k = 1; k < valArray1.length; k++) {
    var objName = 'obj' + k;
    var objValue = valArray1[k];
    myJson.objArray1[objName] = objValue;
}
for (var k = 1; k < valArray2.length; k++) {
    var objName = 'obj' + k;
    var objValue = valArray2[k];
    myJson.objArray2[objName] = objValue;
}
console.log(JSON.stringify(myJson));

コンソールログの結果は次のようになります。

{
   "objArray1": {
        "obj1": 121,
        "obj2": 324,
        "obj3": 42,
        "obj4": 31
   },
   "objArray2": {
        "obj1": 232,
        "obj2": 131,
        "obj3": 443
  }
}

2
ここで送信するコードを適切に配置することの有用性を強調できますか?間隔を空けずに読むのははるかに困難です。
ケビンルイス

1
これは私に終わりがありませんでした。まさに私が必要としたもの。
Derek

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.