Mustache.js:解析json

时间:2015-06-25 11:37:25

标签: javascript json parsing templates mustache

我从api

中提取下面的JSON
{  
   "totalResults":1,
   "items":[  
      {  
         "body":"here is the body",
         "excerpt":"here is the exceprt",
         "title":"article title",
         "customFields":[  
            {  
               "basename":"image_title",
               "value":""
            },
            {  
               "basename":"image_tag",
               "value":""
            },
            {  
               "basename":"image_text",
               "value":""
            },
            {  
               "basename":"image_01",
               value: "<form mt:asset-id="428270" class="enclosure enclosure-image" style="display: inline;"><a href="http://mywebsite.com/news/images/2015/06/image.jpg">image.jpg</a></form>"
            },
            {  
               "basename":"image_01_cap",
               "value":"some text for the captions"
            }
         ]
      }
   ]
}

我是小胡子的新手。我要解析的数据不是对象数组,而是具有数组值的对象。

到目前为止,我得到了这个,但没有输出。我也想从值中提取img url。我使用的是最新版本的Mustache.js 2.1.2

{{#items}}
    {{#customFields}}
        {{#basename.image_01}}
                <img src="{{value}}">
         {{/basename.image_01}} 
    {{/customFields}}
{{/items}}

我希望OUTPUT为:<img src="http://mywebsite.com/news/images/2015/06/image.jpg">

2 个答案:

答案 0 :(得分:0)

您正在尝试在模板引擎中使用逻辑。 Mustache旨在不允许这种行为。

此外,image_01是basename的值,而不是属性。您无法使用点表示法达到值,即obj.property。

最佳解决方案是在将json传递给小胡子之前,进一步由服务器或客户端处理json。

答案 1 :(得分:0)

假设您已收到$ .ajax会话的请求。 with .done(function(data} { .... })

如果正确解析了代码应该是这样的。到目前为止,我看到JSON没有正确格式化

        {  
           "basename":"image_01",
           value: "<form mt:asset-id="428270" class="enclosure enclosure-image" style="display: inline;"><a href="http://mywebsite.com/news/images/2015/06/image.jpg">image.jpg</a></form>"
        },

通常当你有一个key =&gt;值链时,应该引用“key”和“value”:

{ "myval":"true"}

在您的情况下,值的格式不正确:

  • “value”必须作为标准引用
  • “值”的HTML未正确格式化为JSON。你不能包括没有逃避引号的HTML。你有两个选项来正确格式化“值”的内容:1)urlencode你的数据库中的HTML,所以当它以JSON格式返回给你时,它不会弄乱你的字符串,或2)使用你的转义引号HTML,所以它不会给你错误。结果应如下所示:

在你的html上使用URLEncode

        {  
           "basename":"image_01",
           "value": "%3Cform+mt%3Aasset-id%3D%22428270%22+class%3D%22enclosure+enclosure-image%22+style%3D%22display%3A+inline%3B%22%3E%3Ca+href%3D%22http%3A%2F%2Fmywebsite.com%2Fnews%2Fimages%2F2015%2F06%2Fimage.jpg%22%3Eimage.jpg%3C%2Fa%3E%3C%2Fform%3E"
        },

在html值上使用转义引用:

        {  
           "basename":"image_01",
           "value": "<form mt:asset-id=\"428270\" class=\"enclosure enclosure-image\" style=\"display: inline;\"><a href=\"http://mywebsite.com/news/images/2015/06/image.jpg\">image.jpg</a></form>"
        },

现在,鉴于此,您可以将url_decode值稍后评估为DOM对象并提取图像的url,或者使用转义引号部分的html ...此时此过程非常类似。你必须创建一个不可见的对象并提取数据:如果你想要它作为$ .ajax请求的结果,你可以获得你的网址:

.done(function(data){
    var myhtml = data.items[0].customFields[3].value;
    $("<div id='myfakecontainer'></div>").appendTo("body");
    $("#myfakecontainer").hide();
    $(myhtml).appendTo("#myfakecontainer");
    var mylink = $("#myfakecontainer").find("a");
    console.log($(mylink).attr("href"));
    $("#myfakecontainer").remove();
 }

这样,您必须在模板中获得图像的价值。