Javascript无法读取JSON数据
我使用以下代码从网站调用APIJavascript无法读取JSON数据,javascript,json,Javascript,Json,我使用以下代码从网站调用API 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&a
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(“result”).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;
你有两个问题
首先
JSON.stringify
将JavaScript数据结构转换为JSON字符串
您需要JSON.parse
才能转到另一个方向
秒
您正在解析的数据结构是一个对象数组
您正在忽略数组并尝试将其视为对象
在访问对象的属性之前,需要访问数组中的对象
(显然,这可以在没有间隙变量的情况下完成,但为了清晰起见,我已经将其分解了)。好的,我发现了问题所在。JSON字符串开头和结尾的方括号导致了问题。使用.replace(/[[]']+/g'')将其删除后,问题就解决了 当然,我必须用
JSON.parse(JSONOBJ);
非常感谢你的帮助 不应该是
JSONOBJ[0].kWh\u Tot\u Min
既然JSONOBJ
是[]
的数组,我相信JSONOBJ是字符串而不是数组。它是JSON格式的,就像您可能发送到服务器的一样。您可以使用JSON.parse将其转换回数组。您可以尝试apiObject[0]。kWh\u Tot\u minis不是apiObject
已经是对象了吗?你需要解析吗?@theKidOfArcrania-因为我们看不到callApi
函数的代码,所以我们无法知道。因为OP试图使用JSON.*函数,所以我假设它不是。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-问题:我需要做什么才能得到正确的值,即127009.1?回答:JSON.parse(JSONOBJ)[0].kWh\u Tot\u Min包含正确的值请花一些时间解释为什么这是问题的解决方案。
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;
JSON.parse(JSONOBJ);