如何解决json解码返回null错误

时间:2019-04-24 07:39:00

标签: php json

我的API URL在浏览器中返回的代码如下所示。
,但是json_decode($api_url,true);返回null。
我检查了json_last_error();,它返回4(json错误语法)。
它与json_decode(file_get_contents($api_url),true);一起使用
为什么它不能与json_decode一起使用。请帮助

{"dataset":{"id":27153572,"dataset_code":"20MICRONS_A_DEBT","database_code":"DEB","name":"20 Microns Limited,Total Debt","description":"\u003cp\u003e20 Microns Limited(NSE:20MICRONS)-Total Debt(Annual)\u003c/p\u003e","refreshed_at":"2018-09-21T08:04:08.278Z","newest_available_date":"2018-03-31","oldest_available_date":"2005-03-31","column_names":["PERIOD","STANDALONE","CONSOLIDATED"],"frequency":"annual","type":"Time Series","premium":true,"limit":null,"transform":null,"column_index":null,"start_date":"2005-03-31","end_date":"2018-03-31","data":[["2018-03-31",128.56,133.68],["2017-03-31",144.9,151.73],["2016-03-31",155.18,163.41],["2015-03-31",152.8,164.62],["2014-03-31",162.01,176.64],["2013-03-31",148.49,164.73],["2012-03-31",144.67,158.6],["2011-03-31",81.42,120.31],["2010-03-31",84.35,87.35],["2009-03-31",58.62,58.62],["2008-03-31",46.52,null],["2007-03-31",42.46,null],["2006-03-31",40.03,null],["2005-03-31",38.98,null]],"collapse":null,"order":null,"database_id":14992}}

2 个答案:

答案 0 :(得分:0)

您尝试执行的操作没有任何意义。 $api_url只是一个URL,因此当您尝试对其进行解码时,它没有json的结构,并且会抛出异常。

您应该解码的是该URL返回给您的数据。

因此,首先您应该从url获取数据,然后使用json_decode($api_url,true);

要获取数据,可以使用file_get_contentscurl

答案 1 :(得分:0)

支持u_mulder击中头部的钉子,但我想为您分解一下。

file_get_contents()的用途: file_get_contents()函数是PHP中的内置函数,用于将文件内容读取为字符串。

请注意,“文件”可以是驻留在Web服务器上的文件,也可以是远程文件(URL),从本质上讲,这将为您提供Web文档。

json_decode()的用途: json_decode()函数是PHP中的内置函数,用于解码JSON字符串。它将JSON编码的字符串转换为PHP变量。

牢记这一点,您可以看到对无效的JSON字符串或URL执行json_decode将使结果呈现为NULL。

json_decode('https://www.website.com') 

这实际上是您正在做的。在json_decode中执行file_get_contents首先将URL / File('https://www.website.com')转换为字符串,然后将具有JSON的字符串通过json_decode转换为数组。