如何反序列化非常大的JSON字符串

时间:2014-09-22 06:45:14

标签: json coldfusion coldfusion-9

我正在使用以下API将数据加载到我们的应用程序中

REC Registry

根据规范,它使用YYYY-MM-DD格式的日期作为输入。 我正在尝试Deserialize返回的JSON字符串,但由于数据量很大;我收到连接失败错误。

有没有更好的方法(可能是异步的)来做同样的事情?我尝试过搜索,但大部分解决方案都涉及.NET

到目前为止

代码:

<cfhttp url="https://rec-registry.gov.au/rec-registry/app/api/public-register/certificate-actions"
        result ="RecRegistry_JSON" 
        method="GET" getasbinary="never">
    <cfhttpparam name="Date" value="#Dateformat(DateAdd("d",-3, Now()),"YYYY-MM-DD")#" type="URL">
</cfhttp>

<cfset recJSON = DeserializeJSON(RecRegistry_JSON.FileContent)>

<cfdump var="#recJSON#">

编辑1:根据Adam Cameron的评论,问题在于cfdump因为无法转储大量数据。 deserialisation可以很好地处理20 MB的数据。

1 个答案:

答案 0 :(得分:0)

在本地运行代码时,我遇到的问题是HTTP请求超时。为了解决这个问题,我在cfhttp标记中添加了一个timeout参数,并在页面顶部添加了一个cfsetting标记。

<cfsetting requestTimeout="9000">
<cfhttp 
        url="https://rec-registry.gov.au/rec-registry/app/api/public-register/certificate-actions"
        result ="RecRegistry_JSON" 
        method="GET" 
        getasbinary="never" 
        timeout="9000" 
        file="response.json"
        path="#expandPath('/')#"
>
    <cfhttpparam name="Date" value="#Dateformat(DateAdd("d",-3, Now()),"YYYY-MM-DD")#" type="URL">
</cfhttp>

我还分割了下载文件和解析文件的功能,因此我不必等待下载来测试解析。请注意cfhttp标记上的文件和路径设置。

不知道您打算如何处理数据,您可能最好获得较小的块,例如一次获得1天并在将其放入本地解决方案后编译这些结果。