使用动态键检索 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 - 无法通过动态数据检索实现分页[重复]
在 JavaScript 中动态创建 JSON 数组键 [重复]