2015-08-26 2 views
1

Я использую API Gaug.es для отслеживания некоторых простых статистических данных, и я пытаюсь включить эти данные в свой бэкэнд. API возвращает данные в формате JSON, и, несмотря на все мои усилия, я всегда стараюсь бороться с этим форматом. Действительно, несколько лет назад я задал здесь вопрос, связанный с JSON, и ответ на этот вопрос послужил отправной точкой для этого, но мой старый, ржавый мозг, похоже, не может окунуться в эту проблему!Разбор данных JSON с Coldfusion

Вот что я до сих пор;

<cfhttp url="https://secure.gaug.es/gauges" method="GET" resolveurl="YES"> 
<cfhttpparam type="header" name="X-Gauges-Token" value="myAPIKey"> 
</cfhttp> 

<cfset gaugeResult = deserializeJSON(cfhttp.filecontent)> 

<cfdump var="#gaugeResult#"> 

<cfset formattedData = [] /> 
<cfset tmp = {} /> 

<cfloop collection=#gaugeResult# item="gauges"> 
<cfset tmp.title = gaugeResult[title] /> 
<cfset tmp.todayviews = gaugeResult[today]["views"] /> 
<cfset arrayAppend(formattedData,duplicate(tmp)) /> 
</cfloop> 

<cfdump var=#formattedData# /> 

Прилагается скриншот gaugeResult cfdump.

enter image description here

По сути то, что мне нужно сделать, это взять идентификатор, название, сегодня> вид и сегодня> Люди цифры, которые я затем добавить в базу данных.

Текущий запрос возвращает ошибку «Variable TITLE undefined» - и мое ограниченное понимание в этой области оставило меня несколько озадаченным!

+0

Название существует в массиве, поэтому вам нужно будет перебрать массив. Например, чтобы получить первый заголовок, вероятно, будет gaugeResult.gauges [1] .title –

+0

@JedihomerTownend спасибо, вы действительно правы. Внесение изменений в мой код; И он возвращается правильно. Однако он возвращает только первый результат (предположительно из-за [1]. Если я удалю [1], он снова выдаст ошибку. Как я могу заставить его вернуть все результаты без необходимости отдельно ссылаться на строки (количество будет варьироваться) – Lee

ответ

4

Если я понимаю вопрос, тогда что-то подобное должно сделать трюк. Данные, которые вы хотите, находятся в массиве, поэтому просто перебирайте массив.

<cfset formattedData = []> 
<cfloop array="#gaugeResult.gauges#" index="it"> 
    <cfset arrayAppend(formattedData, { 
     id = it.id, 
     title = it.title, 
     todayViews = it.today.views, 
     todayPeople = it.today.people 
    })> 
</cfloop> 
<cfdump var="#formattedData#"> 
+0

Спасибо, что работает отлично. – Lee