我有String
对象与模板库,如:
<h1>{{header}}</h1>
{{#bug}}
{{/bug}}
{{#items}}
{{#first}}
<li><strong>{{name}}</strong></li>
{{/first}}
{{#link}}
<li><a href="{{url}}">{{name}}</a></li>
{{/link}}
{{/items}}
{{#empty}}
<p>The list is empty.</p>
{{/empty}}
我想拉出代表String
的另一个JSONObject
对象并将其字段放入模板中:
{
"header": "Colors",
"items": [
{"name": "red", "first": true, "url": "#Red"},
{"name": "green", "link": true, "url": "#Green"},
{"name": "blue", "link": true, "url": "#Blue"}
],
"empty": false
}
最后,我会得到代表HTML结构的String
:
<h1>Colors</h1>
<li><strong>red</strong></li>
<li><a href="#Green">green</a></li>
<li><a href="#Blue">blue</a></li>
我不想使用任何POJO或Map
s - 仅使用标准String
个对象,或者将第二个String
转换为JSONObject
以将其用作模板上下文。
有人能给我一个如何实现这个目标的例子吗?
谢谢。
修改:执行模板时我对模板/ JSON
结构一无所知 - 我必须使用未知模板/ JSON
并假设它们是正确的
答案 0 :(得分:1)
我无法找到处理纯String
个对象的方法 - 我正在将JSONObject
转换为Map
以使其与Mustache一起使用。这是转换代码:
public static Map<String, Object> toMap(JSONObject object) throws JSONException
{
Map<String, Object> map = new HashMap();
Iterator keys = object.keys();
while (keys.hasNext())
{
String key = (String) keys.next();
map.put(key, fromJson(object.get(key)));
}
return map;
}
public static List toList(JSONArray array) throws JSONException
{
List list = new ArrayList();
for (int i = 0; i < array.length(); i++)
{
list.add(fromJson(array.get(i)));
}
return list;
}
private static Object fromJson(Object json) throws JSONException
{
if (json instanceof JSONObject)
{
return toMap((JSONObject) json);
} else if (json instanceof JSONArray)
{
return toList((JSONArray) json);
} else
{
return json;
}
}
用法:
mustacheTemplate.execute(JSONUtils.toMap(new JSONObject(myString)));