JavaScript forループでjsonを作成する方法は?


99

私が持っている配列 selectタグのを。

<select id='uniqueID' name="status">
      <option value="1">Present</option>
      <option value="2">Absent</option>
 </select>

JavaScriptで2つのフィールド「uniqueIDofSelectとoptionValue」を持つjsonオブジェクトを作成したいと思います。

私はgetElementsByName( "status")を使用し、それを繰り返します。

編集

次のように出力する必要があります

[{"selectID":2,"OptionValue":"2"},
{"selectID":4,"optionvalue":"1"}]

等々...


optionValueは各 'option'要素の 'value'属性である必要があると思います。1、2などですが、IDとは何ですか。それはテキストですか?「ある」「ない」など?
システムの一時停止

さて、IDがselectのuniqueIDである場合、optionValueは1つだけですよね?すべての選択の配列ではなく、現在の選択が必要だと思いますか?
システムの一時停止

回答:


174

私があなたの要求について理解していることから、これはうまくいくはずです:

<script>
//  var status  = document.getElementsByID("uniqueID"); // this works too
var status  = document.getElementsByName("status")[0];
var jsonArr = [];

for (var i = 0; i < status.options.length; i++) {
    jsonArr.push({
        id: status.options[i].text,
        optionValue: status.options[i].value
    });
}
</script>

41
JSONはオブジェクトであり、配列ではありません。
ガンボ

jsonオブジェクト配列を作成します。しかし、必要なjsonオブジェクトは1つだけです。
ヴィカス

1
var jsonObj = new Array();のように配列を宣言する必要はありませんか。あなたの例は私にとってうまくいきませんでした。new Array()に変更すると、機能します。
Meow、2011

18
var jsonArr = [];新しい配列を作成します。 var jsonObj = {};新しいオブジェクトを作成します
b_dubb

つまり、ばかげた質問です。オブジェクトの配列と、オブジェクトの配列を含むオブジェクトの違いを知っています(かなり、この投稿jsonArr = []との違いjsonObj = {}です)。頻繁に、おそらく誤って、名前/値のペアを保持しているオブジェクトの配列を含むオブジェクトを「JSONオブジェクト」と呼んでいます。単純なJSON構文(実際の.jsonファイルにあるようなもの)に慣れているので、構文的にはこれが異なることを知っています。では、オブジェクトの配列だけをJSONとしても参照できますか?
VoidKing 2013年


8

次のような単一のJavaScriptオブジェクトが必要な場合:

{ uniqueIDofSelect: "uniqueID", optionValue: "2" }

(オプション2の "Absent"が現在の選択です)、次のコードで生成されます。

  var jsObj = null;
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsObj = { uniqueIDofSelect: status.id, optionValue: options[i].value };
        break;
     }
  }

そのようなすべてのオブジェクト(選択したオブジェクトだけでなく)の配列が必要な場合は、マイケルのコードを使用しstatus.options[i].textてくださいstatus.id

選択したオブジェクトのJSON表現を含む文字列が必要な場合は、代わりにこれを使用します。

  var jsonStr = "";
  var status = document.getElementsByName("status")[0];
  for (i = 0, i < status.options.length, ++i) {
     if (options[i].selected ) {
        jsonStr = '{ '
                  + '"uniqueIDofSelect" : '
                  + '"' + status.id + '"'
                  + ", "
                  + '"optionValue" : '
                  + '"'+ options[i].value + '"'
                  + ' }';
        break;
     }
  }

3

forループによって生成された文字列からJavaScriptオブジェクトを作成する場合は、JSONからオブジェクトへのアプローチを使用します。forループを反復してJSON文字列を生成し、次に一般的なJavaScriptフレームワークを使用してJSONをオブジェクトに評価します。

Prototype JavaScript Frameworkを使用しました。キーと値を持つ2つの配列があります。forループを繰り返し、有効なJSON文字列を生成します。私が使用しevalJSON() JavaScriptオブジェクトにJSON文字列を変換する機能を。

これがサンプルコードです。FireBug Consoleで試しみる

var key = ["color", "size", "fabric"];
var value = ["Black", "XL", "Cotton"];

var json = "{ ";
for(var i = 0; i < key.length; i++) {
    (i + 1) == key.length ? json += "\"" + key[i] + "\" : \"" + value[i] + "\"" : json += "\"" + key[i] + "\" : \"" + value[i] + "\",";
}
json += " }";
var obj = json.evalJSON(true);
console.log(obj);

1
おかげでそれは私を大いに助けてくれました、私はjsonstring.evalJSON(true);の代わりにPARSE.json(jsonstring)を使用しました。
Arnaud Bouchot

0

あなたの質問を解読するのはかなり難しいですが、私はそれに挑戦してみます。

あなたは言う:

2つのフィールドuniqueIDofSelectoptionValueJavaScriptでjsonオブジェクトを作成したいと思います 。

そしてあなたは言う:

次のような出力が必要です

[{"selectID":2,"optionValue":"2"},
{"selectID":4,"optionvalue":"1"}]

さて、この出力例は、名前のフィールドを持っていないuniqueIDofSelect、それが唯一持っていますoptionValue

とにかく、あなたはオブジェクトの配列を求めています...

次に、マイケルへのコメントであなたは答えます:

jsonオブジェクト配列を作成します。しかし、必要なjsonオブジェクトは1つだけです。

オブジェクトの配列が必要ないのですか?

あなたは何をしたいですか?

決心してください。


最初に、uniqueIDofSelect == selectID(select要素のID、レコードのIDをselect要素のIDとして保持できます(レコード更新の目的で)。申し訳ありません。foreachループによって生成された選択要素の数も持っています。実際には、このループはEnumerableオブジェクトを表示するためにasp.net MVCで使用している2)そうです、出力全体が1つのjsonオブジェクトであることをおかしかったという私の間違い。しかし、それは実際にはオブジェクトの配列です。そして、マイケルの答えは完璧です。ご指摘ありがとうございます。
Vikas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.