1


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
}

最終的に、StringHTML構造を表すことができます。

<h1>Colors</h1>
<li><strong>red</strong></li>
<li><a href="#Green">green</a></li>
<li><a href="#Blue">blue</a></li>

POJOまたはsを使用したくありません。Map標準Stringオブジェクトのみを使用するか、2番目に変換StringJSONObjectてテンプレートのコンテキストとして使用します。
誰かが私にそれを達成する方法の例を教えてもらえますか?
ありがとう。

編集:テンプレートの実行中、テンプレート/構造について何も知りませんJSON-不明なtemplate /で遊んでJSON、それらが正しいと想定する必要があります。

4

1 に答える 1

1

純粋なStringオブジェクトで作業する方法が見つかりませんでした-Mustacheで動作するように変換JSONObjectMapています。これは変換用のコードです:

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)));
于 2012-09-13T11:31:25.380 に答える