【问题标题】:reading JSON element using JS使用 JS 读取 JSON 元素
【发布时间】:2011-05-17 04:20:38
【问题描述】:

我正在从 PHP 获取请求接收 JSON 对象。它看起来像这样:

data == {"user_id":"7","emp_type_id":[{"0":"11","1":"10"}]}

我需要访问 emp_type_id 中的项目(在本例中为“11”和“10”)。

我可以使用 data["user_id"] 很好地访问 user_id,但不知道如何获取其他项目。我尝试了以下变体:

eti=data["emp_type_id"];
var myVar = eti[0];

我想最终循环遍历 emp_type_id 中的所有项目并将它们添加到 JS 数组中。

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    使用for in 循环

    var data = {"user_id":"7","emp_type_id":[{"0":"11","1":"10"}]};
    var eti = data["emp_type_id"];
    var myVar = eti[0];
    for(var entry in myVar){
      alert(entry + ":\t" + myVar[entry] );
    }
    

    Running JSBIN Example

    【讨论】:

    • 这行得通,但我认为最好像 Hogan 在他的帖子中建议的那样修复他的 JSON。
    【解决方案2】:

    尼尔的回答会有所帮助,但我认为您还有其他问题。你的 json 结构看起来不对

    a) data == {"user_id":"7","emp_type_id":[{"0":"11","1":"10"}]}
    

    应该是

    b) data == {"user_id":"7","emp_type_id":["11","10"]}
    

    那是英文

    a) emp_type_id 一个包含两个字段01 的对象的数组?

    b) emp_type_id 包含两个项目的数组,其值为 1110

    如果应该是 b) 那么你的 json 是错误的。

    【讨论】:

    • 您可能想重新表述一下 - JSON 并没有“错误”,它可能是不必要的、低效的或复杂的,但它肯定是有效的。
    • 嗯,我想应该是 b)。我实际上已经开始了,但是当我无法弄清楚如何获取这些值时(认为它们可能需要一个密钥),我认为这是错误的并将其更改为另一个版本(json_encode($emp_type_id,JSON_FORCE_OBJECT ); 与 json_encode($emp_type_id);)。这会改变我访问这些值的方式吗?
    • @no.go - 好的,我将其更改为“+structure”激活。
    • 语法上没有错,但 OP 可能有其他想法......
    • @vee -- 是的!如果它是一个数组,如 b) 所示,那么它只是项目 x 的 emp_type_id[x]。如果没有,那么它会变得疯狂。有关更多信息,请参阅@James 答案。
    【解决方案3】:

    data 是一个具有两个属性 user_id 和 emp_type_id 的对象。 emp_type_id 是一个包含一个元素 (???) 的数组,该元素是一个具有属性 0 和 1 的对象。

    从对象中读取属性有两种方式:

    var prop = data['emp_type_id'];
    var prop = data.emp_type_id;
    

    如果您有“奇怪”的属性名称,那么您将不得不使用方括号技术。

    所以

    var prop0 = data.emp_type_id[0].0;
    var prop1 = data.emp_type_id[0].1;
    

    我担心“0”和“1”将属于“奇怪的属性名称”类别,因此您可能需要这样做

    var prop0 = data.emp_type_id[0]["0"];
    var prop1 = data.emp_type_id[0]["1"];
    

    【讨论】:

    • +1 - 这个答案清楚地表明了他使用的 json 的语义错误。
    【解决方案4】:

    试试这个:

    var eti = data.emp_type_id;
    var myVar = eti[0];
    

    【讨论】:

      【解决方案5】:
      var eti = data.emp_type_id;
      var myVar = eti[0];
      
      for(var key in myVar){
          myVar[key];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多