javascript
  • json
  • 2011-11-04 77 views 7 likes 
    7

    单引号在Django的模板,我已经打印出来的数据是这样的:JSON解析 - 内部名称

    P.place = '{{place.json|safe}}'; 
    

    然后在JavaScript文件我配对会这样:

    place = JSON.parse(P.place); 
    

    一切都很好像数据:

    {"category": "Cars", "name": "Z"} 
    

    因为字符串看起来像:

    P.place = '{"category": "Cars", "name": "Z"}' 
    

    所以,我可以使用JSON.parse方法巫婆接受字符串作为输入解析它。

    问题是,当我得到的数据这样的:

    {"category": "Cars", "name": "Wojtek's Z"} 
    

    因为比JSON解析器输入字符串看起来像这样:

    '{"category": "Cars", "name": "Wojtek' 
    

    我无法逃避JSON字符串内的单引号,因为那时JSON字符串变得无效。出于同样的原因,我无法用JSON字符串中的double和escape双引号替换周围的引号。

    我的解决方案看起来像这样:

    在HTML模板:

    P.place = {{place.json|safe}}; 
    
    在JavaScript

    var place = JSON.stringify(P.place); 
    place = JSON.parse(place); 
    

    它的工作原理

    然后,但它并不是最佳的解决方案恕我直言。

    如何解决更多的菜刀方式这个问题?

    +0

    你必须在JSON中引用撇号,这是没有办法的。但是,如果使用“\”定义对象,通常可以将其转义。或者,如果你愿意,unicode escape \ u0027(我认为)。 – StaxMan

    +0

    你不能做到这一点,看看jsonlint.com和json.org –

    +0

    你不能做什么?查看json规范。 – StaxMan

    回答

    8

    我能想到的两种可能性:

    创建application/json类型的脚本元素,注入你的模板数据进去,然后读取其数据,例如。或者,在注入字符串之前手动转义单引号,例如。

    simplejson.dumps(yourdata).replace("'", r"\'") 
    
    +0

    感谢您的回答!不过,我认为这个解决方案更适合我的开销。顺便说一句,我们不能在脚本元素中使用id。 –

    +0

    为什么你不能在脚本元素中使用id? –

    +0

    http://stackoverflow.com/questions/2741441/giving-the-script-tag-an-id有关脚本元素的ID信息。 我也怀疑要么是比字符串化,然后再解析JSON开销少,虽然你当然应该基准,看看。 –

    相关问题