使用动态键检索 JSON 响应数据 [重复]

Posted

技术标签:

【中文标题】使用动态键检索 JSON 响应数据 [重复]【英文标题】:Retrieving JSON response data with dynamic key [duplicate] 【发布时间】:2020-03-01 10:42:42 【问题描述】:

我在我的应用程序中调用 API,需要深入了解 JSON 响应。其中有一个随机字符串会发生变化,因此我无法对值进行硬编码。不管随机字符串是什么,有没有办法可以访问 dataset1?


    "data": 
        "Random String that Changes":  
            "dataset1": 
                "date": ...
            ,
            "dataset2":
                "date": ...
            
        
    ,
    "something else": 
        ...
    ,
    "something else": 
        ...
    

以前我是这样对向下钻取进行硬编码的:

this.props.data.randomData['Random String that Changes'].dataset1.date

也试过了:

this.props.data.randomData[0].dataset1.date

【问题讨论】:

random string that changes 的唯一属性data 是的 - 感谢您的回复! @StephanieParker 你到底面临什么问题? 什么是 data.randomData ? randomData 是我猜是动态变化的关键。如果它进入道具,则应该使用道具持有它的钥匙,例如。 this.props.KEY.data 【参考方案1】:

您可以使用获取对象的所有键

const keys = Object.keys(this.props.data);

现在keys 是一个包含所有键的数组,但如果你的 json 总是只有一个键,你可以使用

this.props.data.randomData[keys[0]].dataset1.date

【讨论】:

randomData 不固定。关键是动态。【参考方案2】:

你可以得到dataset1

const values = Object.values(this.props.data)
console.log(values[0]['dataset1'])

确保您的 json 首先包含“更改的随机字符串”,如上述格式所示。

参考:Object.values

【讨论】:

【参考方案3】:

尝试像这样访问对象:

const obj = this.props.data;

obj[Object.keys(obj)[0]].dataset1.date

参考:How to access the first property of an object in javascript?

【讨论】:

randomData 是随机的,不是randomData这个词 好吧我的坏会更新答案 @Bravo 更新了答案【参考方案4】:
Consider sample data in myObj.

var myObj = 
    "data" : 
        "Random String that Changes":  
          "dataset1": 
            "date": "123"
           ,
          "dataset2":
            "date": "123"
          
        
    
  


  var randomString =myObj[Object.keys(myObj)[0]];
  var dataset1Date =randomString[Object.keys(randomString)[0]].dataset1.date;
  console.log(dataset1Date);

So in this way you can access the date which you are trying with 
this.props.data.randomData['Random String that Changes'].dataset1.date

【讨论】:

【参考方案5】:

请查看以下代码以获取解决方案。

var response = 
    "data": 
        "Random String that Changes":  
            "dataset1": 
                "date": ...
            ,
            "dataset2":
                "date": ...
            
        
    ,
    "something else": 
        ...
    ,
    "something else": 
        ...
    
;
var dataInRandomKey = response.data[Object.keys(response.data)[0]];

现在,您在 dataInRandomKey 变量中拥有了整个 JSON 对象(在当前示例中,response['data']['Random String that Changes'])。

【讨论】:

response.data 不是函数 已编辑。现在工作正常。【参考方案6】:

你可以试试for in循环

var a = 
"data": 
    "Random String that Changes":  
        "dataset1": 
            "date": ...
        ,
        "dataset2":
            "date": ...
        
    
,
"something else": 
    ...
,
"something else": 
   ...



var response = a.data;

for(var key in response) 
    console.log(response[key].dataset1);

【讨论】:

以上是关于使用动态键检索 JSON 响应数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Angular 1.x - 无法通过动态数据检索实现分页[重复]

在 Swift 中使用动态键解析 JSON [重复]

在 JavaScript 中动态创建 JSON 数组键 [重复]

使用 Jackson 反序列化重复键以列出

jquery/ajax - 如何使用重复键迭代 json 消息?

NSJSONSerialization 给我错误“重复键”