2012-11-08 6 views
0

저는 JSON 함수를 사용하는 다른 시스템과의 상호 작용이 비교적 새롭고 기본적인 문제를 두뇌로 생각할 수도 있습니다.ColdFusion 8 JSON - 반환 문자열을 쿼리 객체로 변환

쿼리를 JSON 문자열로 반환하는 API 함수에 액세스합니다. 반환 형식은 "보통"입니다. 쿼리는 학교 목록을 선택하기 위해 실행되며 반환 문자열로 구조체 배열을 만듭니다.

"[{\"city\":\"Adrian\",\"state\":\"MI\",\"school\":\"Adrian College\"},{\"city\":\"Albion\",\"state\":\"MI\",\"school\":\"Albion College\"},.........etc. 

그래서 지금은 질의 객체에이 변환과 함께 작동하지만 지금은 단지 자신이 구글/테스트의 루프에 돌고 찾기/재 Google에/재 테스트가 필요합니다. 이것을 학교/도시/주와 함께 쿼리로 변환하는 방법에 대한 지침은 무엇입니까?

+0

백 슬래시는 따옴표가 이스케이프된다는 것을 의미합니다. 반환 유형은 일반이므로 API와 같은 소리는 이것이 JavaScript에 전달 된 일반 문자열이어야한다고 생각하므로 JSON 객체를 가져 와서 JSON에 보관하는 대신 "문자열을 지정"합니다. –

답변

0

DeserializeJSON() 메서드를 사용해야하는 것 같습니다. 더 많은 정보 here.

2

문자열을 사용할 수있는 것으로 변환하려면 먼저 deserializeJson을 사용하십시오.

그런 다음 첫 번째 배열 요소에 StructKeyList을 사용하여 QueryNew에서 사용할 열을 가져옵니다. 값 설정 QuerySetCell 않는 열을 통해 내부 루프를 포함 QueryAddRow 하 배열을 통해 하나의 -

그때 개의 루프 할. 이 라인을 따라


:

<cfset Data = deserializeJson(JsonString) /> 

<cfif NOT ArrayLen(Data)> 
    <cfthrow message="No data" /> 
</cfif> 

<cfset Q = QueryNew(StructKeyList(Data[1])) /> 

<cfloop index="i" array=#Data#> 
    <cfset Row = QueryAddRow(Q) /> 
    <cfloop index="ColName" collection=#Data[i]# > 
     <cfset QuerySetCell(Q , ColName , Data[i][ColName] , Row) /> 
    </cfloop> 
</cfloop> 

<cfdump var=#Q# /> 

이상적 (VAR 적절한 범위 지정을 의미) 함수 안에 넣어.

+0

그게 바로 내가 생각한 것입니다. 그러나 DeserializeJson은 실패합니다. JSON 구문 분석에 실패했습니다. 문자 1에서 '<'가 "[{\"city \ ": \"Adrian \ ", \"state \ ": \"MI \ " , \ "school \": \ "Adrian College \"} – Steve

+0

아마 유효하지 않은 JSON 일 것입니다. [jsonlint.com] (http://jsonlint.com/)은 뭐라고 말합니까? –

+0

문자 1은'<'가 아니며, 실제로 무엇이 진행되고 있는지 알지 못합니다. 그러나 실제 변수에''[{\ "city \"'등이 있으면 JSON 객체를 포함하는 JSON 문자열이 나타납니다 즉, 이중으로 인코딩되었습니다. –

0

해결! 모든 API 요청을 프록 싱하고 API 자격 증명을 확인하는 두 번째 CFC가있었습니다. 프록시 CFC 및 프록시 CFC에서 확장 된 모든 API CFC에는 returnformat = "plain"이 누락되었습니다.

데이터를 입력하면 데이터가 예상대로 되돌아옵니다. 모든 사람들의 제안에 감사드립니다.

관련 문제