Javascript无法读取JSON数据
我已使用以下代码从网站调用API。Javascript无法读取JSON数据
function example(){
// Call the callApi function to create a usable
// object named apiObject from the API request URL.
// Put the API request URL in the call
callApi(
'http://summary.ekmmetering.com/summary?meters=10068&key=MTAxMDoyMDIw&format=json&reports=15&limit=1&fields=kWh_Tot*',
function(apiObject){
// This just displays the object in the result div
// you can use what ever code you would like to work
// with the object here
var JSONOBJ = JSON.stringify(apiObject, null, 4)
//document.getElementById("result").innerHTML = JSONOBJ;
document.getElementById("meterVal").innerHTML = JSONOBJ.kWh_Tot_Min;
}
);
};
在的document.getElementById的第一行( “结果”)。innerHTML的= JSONOBJ,输出如下。
[
{
"Start_Time_Stamp_UTC_ms":1486924437363,
"End_Time_Stamp_UTC_ms":1486925099387,
"End_Date":"Sun Feb 12 2017 18:44:59 GMT+0000 (GMT)",
"Start_Date":"Sun Feb 12 2017 18:33:57 GMT+0000 (GMT)",
"Meter":10068,
"Protocol":"v3",
"Count":663,
"rejected_bad":0,
"rejected_duplicates":0,
"kWh_Tot_DeltaMin":0,
"kWh_Tot_DeltaMax":0.1,
"kWh_Tot_Min":127009.1,
"kWh_Tot_Max":127009.8,
"kWh_Tot_Diff":0.7
}
]
但是,一旦我使用的代码
document.getElementById("meterVal").innerHTML = JSONOBJ.kWh_Tot_Min;
第二行这出来代替。
undefined
我需要做些什么才能获得正确的值,即127009.1?
尝试以下
document.getElementById("meterVal").innerHTML = JSONOBJ[0].kWh_Tot_Min;
请花些时间来解释为什么这是解决问题的办法。 – GabrielOshiro
console.log(JSON.parse(JSONOBJ)[0].kWh_Tot_Min);
这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/15187073) – Eldelshell
问题:我需要做些什么来获得正确的值,即127009.1? 答案:JSON.parse(JSONOBJ)[0] .kWh_Tot_Min包含正确的值 – MrBinWin
你有两个问题。
首先
JSON.stringify
一个JavaScript数据结构转换为JSON的字符串。
您需要JSON.parse
才能走另一条路。
二
你正在分析的数据结构是对象的阵列。
您正在忽略数组,并试图将其作为对象来处理。
您需要先访问数组中的对象,然后才能访问该对象的属性。
var json = apiObject;
var myArray = JSON.parse(json);
var myObject = myArray[0];
var kWh_Tot_Min = myObject.kWh_Tot_Min;
document.getElementById("meterVal").innerHTML = kWh_Tot_Min;
(这可以,很明显,在没有间隙变量做,但我已经打破下来为清楚起见)。
不是'apiObject'已经是一个对象吗?你需要解析吗? – theKidOfArcrania
@theKidOfArcrania - 由于我们无法看到'callApi'函数的代码,所以我们无法知道。由于OP试图使用JSON。*函数,我假设它不是。 – Quentin
好吧我找到了问题。 JSON字符串开头和结尾处的方括号引起了问题。使用.replace(/ [[]'] +/g,'')删除后,问题就解决了。
我当然有
JSON.parse(JSONOBJ);
非常感谢你的帮助来解析JSON字符串。
不应该是'JSONOBJ [0] .kWh_Tot_Min;'因为'JSONOBJ'是'[]'的数组? – Mikey
我相信JSONOBJ是一个不是数组的字符串。它采用JSON格式,就像你可能发送给服务器的那样。您可以使用JSON.parse将其重新转换为数组。您可以尝试apiObject [0] .kWh_Tot_Min –