Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用动态属性名访问嵌套属性_Javascript_Arrays_Json - Fatal编程技术网

Javascript 使用动态属性名访问嵌套属性

Javascript 使用动态属性名访问嵌套属性,javascript,arrays,json,Javascript,Arrays,Json,我有一个从这个JSON生成的对象: { "data": { "Meta Data": { "1. Information": "Monthly Prices (open, high, low, close) and Volumes", "2. Symbol": "MSFT", "3. Last Refreshed": "2017-08-18", "4. Time Zone":

我有一个从这个JSON生成的对象:

{
    "data":  {
        "Meta Data": {
            "1. Information": "Monthly Prices (open, high, low, close) and Volumes",
            "2. Symbol": "MSFT",
            "3. Last Refreshed": "2017-08-18",
            "4. Time Zone": "US/Eastern"
        },
        "Monthly Time Series": {
            "2017-08-18": {
                "1. open": "73.1000",
                "2. high": "74.1000",
                "3. low": "71.2800",
                "4. close": "72.4900",
                "5. volume": "285933387"
            },
            "2017-07-31": {
                "1. open": "69.3300",
                "2. high": "74.4200",
                "3. low": "68.0200",
                "4. close": "72.7000",
                "5. volume": "451248934"
            }
        }
    }
}
使用
Object.keys()
,我可以获得“每月时间序列”键,但如何访问其中的键?我想通过“Monthly time series”键中的键运行for循环。我该怎么做呢?

您可以使用来获取密钥数组,但我建议使用来迭代密钥数组,而不是for…循环

代码:

const obj={“数据”:{“元数据”:{“1.信息”:“月度价格(开盘、高位、低位、收盘)和成交量”,“2.符号”:“MSFT”,“3.上次刷新”:“2017-08-18”,“4.时区”:“美国/东部”},“月度时间序列”:{“2017-08-18”:“开盘”:“73.1000”,“2.高位”:“74.1000”,“3.低位”:“71.2800”,“4.收盘”:“72.4900”,“5.成交量”:“28593387”},“2017-07-31”:{“1.开盘”:“69.3300”,“2.高”:“74.4200”,“3.低”:“68.0200”,“4.收盘”:“72.7000”,“5.成交量”:“451248934”};
对象
.keys(对象数据['月度时间序列])
.forEach(函数(k){
console.log(对象数据['Monthly Time Series'][k]['1.open']);

})
您可以通过
Object.keys
功能以与现在相同的方式访问密钥

var data = JSON.parse('{"data": {\
    "Meta Data": {\
        "1. Information": "Monthly Prices (open, high, low, close) and Volumes",\
        "2. Symbol": "MSFT",\
        "3. Last Refreshed": "2017-08-18",\
        "4. Time Zone": "US/Eastern"\
    },\
    "Monthly Time Series": {\
        "2017-08-18": {\
            "1. open": "73.1000",\
            "2. high": "74.1000",\
            "3. low": "71.2800",\
            "4. close": "72.4900",\
            "5. volume": "285933387"\
        },\
        "2017-07-31": {\
            "1. open": "69.3300",\
            "2. high": "74.4200",\
            "3. low": "68.0200",\
            "4. close": "72.7000",\
            "5. volume": "451248934"\
        }\
}}}');

console.log(Object.keys(data['data']["Monthly Time Series"]));
输出:

(2) ["2017-08-18", "2017-07-31"]

啊,在编辑之后,如果你想循环遍历它们,你不需要
Object.keys
函数-你可以像这样简单地遍历对象:

for (var i in data['data']['Monthly Time Series'])
    console.log(i, data['data']['Monthly Time Series'][i])
i
将包含您的密钥


根据评论:

var obj = {"data": {
    "Meta Data": {
        "1. Information": "Monthly Prices (open, high, low, close) and Volumes",
        "2. Symbol": "MSFT",
        "3. Last Refreshed": "2017-08-18",
        "4. Time Zone": "US/Eastern"
    },
    "Monthly Time Series": {
        "2017-08-18": {
            "1. open": "73.1000",
            "2. high": "74.1000",
            "3. low": "71.2800",
            "4. close": "72.4900",
            "5. volume": "285933387"
        },
        "2017-07-31": {
            "1. open": "69.3300",
            "2. high": "74.4200",
            "3. low": "68.0200",
            "4. close": "72.7000",
            "5. volume": "451248934"
        }
}}}

Object.keys(obj.data["Monthly Time Series"]).map(function(key, index){ return obj.data["Monthly Time Series"][key]["1. open"]; });
要从数组中获取一个值,请执行以下操作:

(2) ["73.1000", "69.3300"]
或:


要获取所有值(它们不会被浓缩)

Reflect.ownKeys(JSON.parse(data)[“Monthly Time Series”]”)
,您必须尝试递归方法在JSON@Hitmands中使用意外的标记“o”。这样做之后,您有JSON或javascript对象吗?为什么要使用
object.keys()
要访问非随机属性,如
“月度时间序列”
var monthlyTimeSeries=object[“data”][“Monthly Time Series”];
要访问“1.open”inside“Monthly Time Series”的值,我可以做什么?如果我重复上面的方法,它显示未定义!要访问“1.open”在“Monthly time series”中的值,我能做什么?如果我重复上述方法,它会显示未定义!
1.open
不在
Monthly time series
-它是
data['data']['Monthly time series']['2017-07-31']['1.open']
我做了类似于此对象的操作。键(response.data['Monthly Time Series'].forEach(函数(k){console.log(Object.keys(k[“1.open”]);它在控制台上提供未定义的项请指定您要执行的操作-现在您正在获取
forEach
循环的结果键,该循环确实返回
未定义的
forEach
始终返回
未定义的
)。是否要获取
月度时间序列中最低级别的值?
?是,我要获取月度时间序列中最低级别的值
Object.keys(obj.data["Monthly Time Series"]).map(function(key, index){ return Object.values(obj.data["Monthly Time Series"][key]); });