【问题标题】:How to retrieve key and value from JSON String如何从 JSON 字符串中检索键和值
【发布时间】:2010-05-28 06:59:44
【问题描述】:

我有一个这种格式的 JSON 字符串:

{
  "supplier": {
    "mov_10": "love actually",
    "mov_1": "fare"
  },
  "quantity": 20,
  "success": true,
  "length":2
}

现在我想使用supplier 对象(同时使用键和值)在下面创建一个选择框,如下所示:

<select id="selectme">
    <option id="mov_10">love actually</option>
    <option  id="mov_1">fare</option>
</select>

那么我该如何创建它呢?我只想知道如何到达对象中的mov_10mov_1。 对不起,我的英语不好,但请帮助我。

谢谢。

【问题讨论】:

  • 我稍微清理了您的问题,但没有更改您对“JSON 对象”的引用。这实际上是不正确的。没有“JSON 对象”这样的东西。您所拥有的只是对象字面量表示法中的常规 JavaScript 对象。您将它与“JSON 字符串”混淆了,后者是一个专门格式化为对象文字符号子集的字符串。
  • 我的命名可能不正确,但我显示了我得到的数组。

标签: jquery json


【解决方案1】:

使用for...in 语句迭代键:

for ( var k in someObject.supplier ) {
    someOption.value = k;
    someOption.text  = someObject.supplier[ k ];
}

【讨论】:

  • Doug Crockford on for..in: "请注意,添加到对象原型中的成员将包含在枚举中。明智的做法是使用 hasOwnProperty 方法进行防御性编程来区分对象的真正成员。” javascript.crockford.com/code.html
【解决方案2】:

如果我正确理解了这个问题,我想你可能想在这个方面使用一些东西:

var jsonArray = ... ; // {"supplier": ... } (JS Object)
var supplierOptions = jsonArray.supplier;

// TODO: remember to set up selectme!

for(var optionId in supplierOptions) {
    if(!supplierOptions.hasOwnProperty(optionId)) {
        continue;
    }

    var optionValue = supplierOptions[optionId];

    // operate with name and value here (append to select ie.)
    $("#selectme").append('<option id="' + optionId + '">' + optionValue + '</option>');
}

代码可能需要进行一些清理。不过,希望它传达了基本思想。

【讨论】:

  • 您应该使用if (!supplier.hasOwnProperty(optionId)) continue 来确保您不使用对象原型上的可枚举属性。 hasOwnProperty
  • if (!supplier.hasOwnProperty(optionId)) 这有什么特别之处?请清除
  • 谢谢sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
相关资源
最近更新 更多