Имя переменной, начинающееся с @, вызывает ошибку: в строке X в столбце Y обнаружен неверный токен @ - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь отформатировать страницу ColdFusion с использованием данных API Национальной службы погоды (NOAA). Используя следующий код ColdFusion, я могу сбросить данные.

<cfhttp url="https://api.weather.gov/alerts/active/zone/ANZ335" result="weather">
<cfhttpparam name="accept" type="header" value="application/ld+json">
</cfhttp>
<cfset alerts = deserializeJSON(#weather.filecontent#) /> 

В дампе я могу XML-данные, которые используют символ «@» для именования узлов. Dump of XML Data

Однако ColdFusion не нравится знак @ при попытке вывести значения. Например:

#arraylen(alerts.@graph)#

Вызывает "Недопустимый токен @ найден в строке X ..." Ошибка.

Любые идеи о том, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 11 сентября 2018

При использовании точечной нотации имена переменных должны соответствовать правилам именования переменных CF . В частности:

Имя переменной должно начинаться с буквы, подчеркивания или Unicode символ валюты ....

Для ключей структуры с недопустимыми именами переменных используйте обозначение ассоциативного массива:

structName["keyNameInQuotes"] 

... или, более конкретно:

 alerts["@graph"]

Как упомянуто в комментариях @ Шон , вы также можете смешивать точечные обозначения с ассоциативными обозначениями массивов. Таким образом, они также действительны:

variables.alerts["@graphs"]
variables["alerts"]["@graphs"]
...