2017-02-12 234 views
0

我已使用以下代码从网站调用AP​​I。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?

+0

不应该是'JSONOBJ [0] .kWh_Tot_Min;'因为'JSONOBJ'是'[]'的数组? – Mikey

+0

我相信JSONOBJ是一个不是数组的字符串。它采用JSON格式,就像你可能发送给服务器的那样。您可以使用JSON.parse将其重新转换为数组。您可以尝试apiObject [0] .kWh_Tot_Min –

回答

0

尝试以下

document.getElementById("meterVal").innerHTML = JSONOBJ[0].kWh_Tot_Min; 
+0

请花些时间来解释为什么这是解决问题的办法。 – GabrielOshiro

0
console.log(JSON.parse(JSONOBJ)[0].kWh_Tot_Min); 
+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/15187073) – Eldelshell

+0

问题:我需要做些什么来获得正确的值,即127009.1? 答案:JSON.parse(JSONOBJ)[0] .kWh_Tot_Min包含正确的值 – MrBinWin

0

你有两个问题。

首先

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; 

(这可以,很明显,在没有间隙变量做,但我已经打破下来为清楚起见)。

+0

不是'apiObject'已经是一个对象吗?你需要解析吗? – theKidOfArcrania

+0

@theKidOfArcrania - 由于我们无法看到'callApi'函数的代码,所以我们无法知道。由于OP试图使用JSON。*函数,我假设它不是。 – Quentin

0

好吧我找到了问题。 JSON字符串开头和结尾处的方括号引起了问题。使用.replace(/ [[]'] +/g,'')删除后,问题就解决了。

我当然有

JSON.parse(JSONOBJ); 

非常感谢你的帮助来解析JSON字符串。