1

Coldfusion を使用して逆シリアル化された JSON ファイルをテーブルに構築するための最新の資料を探しています。これまでのところ、次のようなリンクを使用しています:

[ADobe deserialize JSON][1] JSONLINT.com を使用して、JSON ファイルのエラーをチェックします (エラーはありませんでした)。また、上記のリンクの例を見て、以下に示す CF エラーがスローされることがわかりました![入力してください。画像の説明はこちら][2]

別のローカル サーバーからデータを解析しようとしているだけで、上記のリンクのコードを参照として使用しています。コードを正確にコピー アンド ペーストすると、CF エラーが表示されます。私は通常、coldfusion を使用して SQLdatabase のデータからページを作成しますが、CFdump を利用して、別の方法で試してみたかったのです。

<!--- Get the JSON Feed --->  
<cfhttp url="http://localhost:8500/LearnJS/dataconv.cfm"> 

<!--- JSON data is sometimes distributed as a JavaScript function. 
 The following REReplace functions strip the function wrapper. ---> 
<cfset theData=REReplace(cfhttp.FileContent,  
    "^\s*[[:word:]]*\s*\(\s*","")> 
<cfset theData=REReplace(theData, "\s*\)\s*$", "")> 

<!--- Test to make sure you have JSON data. ---> 
<cfif !IsJSON(theData)> 
<h3>The URL you requested does not provide valid JSON</h3> 
<cfdump var="#theData#"> 

<!--- If the data is in JSON format, deserialize it. ---> 
<cfelse> 

<cfset cfData = DeserializeJSON(theData)> 

<!--- Parse the resulting array or structure and display the data. 
         In this case, the data represents a ColdFusion query that has been 
         serialized by the SerializeJSON function into a JSON structure with 
         two arrays: an array column names, and an array of arrays,  
         where the outer array rows correspond to the query rows, and the 
         inner array entries correspond to the column fields in the row. ---> 
<!--- First, find the positions of the columns in the data array. ---> 


<cfset colList=ArrayLen(cfData.COLUMNS)> 
<cfset cityIdx=ListFind(colList, "City")> 
<cfset tempIdx=ListFind(colList, "Temp")> 
<cfset fcstIdx=ListFind(colList, "Forecasts")> 
<!--- Now iterate through the DATA array and display the data. ---> 
<cfoutput> 
    <cfloop index="i" from="1" to="#ArrayLen(cfData.DATA)#"> 
        <h3>#cfData.DATA[i][cityIdx]#</h3> 
        Current Temperature: #cfData.DATA[i][tempIdx]#<br><br> 
        <b>Forecasts</b><br><br>         
        <cfloop index="j" from="1" to="#ArrayLen(cfData.DATA[i][fcstIdx])#"> 
            <b>Day #j#</b><br> 
            Outlook: #cfData.DATA[i][fcstIdx][j].WEATHER#<br> 
            High: #cfData.DATA[i][fcstIdx][j].HIGH#<br> 
            Low: #cfData.DATA[i][fcstIdx][j].LOW#<br><br> 
        </cfloop> 
    </cfloop> 
</cfoutput> 
</cfif>
4

1 に答える 1

1

ArrayLen()は、配列の長さである整数を返します。次の行で...

<cfset colList=ArrayLen(cfData.COLUMNS)> 
<cfset cityIdx=ListFind(colList, "City")>

colList を ArrayLen() の戻り値 (整数) に設定し、それをリストとして参照しようとします。それはおそらくエラーを引き起こしています。

于 2013-06-18T23:49:56.843 に答える