Невозможно получить доступ к некоторым (не всем) полям свойств в JSONObject, который содержит различные массивы.
Исключение:
org.apache.velocity.exception.MethodInvocationException:
Invocation of method 'get' in class org.json.JSONObject threw exception org.json.JSONException:
JSONObject["published"] not found. at templates/eventbrite.vsl[line 43, column 41]
Я пробовал практически каждую возможную перестановку методов доступа к свойствам шаблона скорости $object.published / "$object.published" / "{$object.published}
из различных веб-ресурсов.
Цели этого проекта: [На стороне сервера]
- [отлично работает] Получить String json_result из вызова веб-сайта / API (например, Eventbrite).
- [похоже, также работает] создайте org.json.JSONObject jsonObj из этой строки.
- [работает] поместите его в контекст
VelocityContext
. - [не работает] используя пользовательский шаблон, извлеките необходимые данные из jsonObj.
- [работает, когда 4 не работает], создайте новый стандартизированный JSON для соответствия другим источникам API событий. Данные Rosetta Stone о событиях json.
public String publish(String templatePath, String json_result, Map model, VelocityContext context) throws IOException
{
Writer writer = new StringWriter();
try
{
JSONObject jsonObj = new JSONObject(json_result.trim());
Object valueObj;
for (String key : jsonObj.keySet())
{
valueObj = jsonObj.get(key.trim());
context.put(key, valueObj);
logger.info("Adding K,V: "+key+" in context");
}
Iterator it = model.entrySet().iterator();
while (it.hasNext())
{
Map.Entry pair = (Map.Entry) it.next();
logger.info("Adding K,V: " + pair.getKey().toString() + " , " + pair.getValue() + " to velocity context");
context.put(pair.getKey().toString(), pair.getValue());
it.remove(); /* avoids a ConcurrentModificationException */
}
// following line is where it all dies apparently
velocityEngine.mergeTemplate(templatePath, "UTF-8", context, writer);
}
catch (JSONException e)
{
e.printStackTrace();
}
writer.flush();
String result = writer.toString();
logger.info("\n[MERGED JSON START - "+templatePath+"]\n"+result+"\n[MERGED JSON END]\n");
return result;
}
json_result согласованные данные (сильно отредактированные для ясности):
[
{
"shareable":true,
"is_series_parent":false,
"description":{"html":"......<BR>really long description","text":"same minus html"
},
"source":"create_2.0",
"format_id":"6",
"logo":{},
"end":{
"utc":"2019-11-19T17:30:00Z",
"timezone":"America/New_York",
"local":"2019-11-19T12:30:00"
},
"currency":"USD",
"id":"68282188865",
"venue_id":"36369841",
"summary":"\u201cLady Bug: Action Hero!\u201d is the story of a brave little lady bug and the animal friends that live with her in the rainforest. Performed by D",
"start":{
"utc":"2019-11-19T16:30:00Z",
"timezone":"America/New_York",
"local":"2019-11-19T11:30:00"
},
"published":"2019-08-07T15:13:47Z",
"version":"3.0.0"
}
,{},{},{} 50 items total in this array...
]