`

在使用JSON时的一点麻烦事.

阅读更多
在使用JSON时的一点麻烦事.



问题的是这样的,当用JSON传回数据在HTML上用时总有双(单)引号的问题,即把JSON里的数据赋给HTML里某一元素的value属性时JSON值里的双(单)引号与HTML本身的引号就混在一起了.鼓捣了半天也没搞定,真是郁闷.

下面是一个简化的例子.

<html>
    <script  Language="javascript">
        //这个menuList是利用JSON从Java端传回的数据.
        var menulist = {"MenuList":
                        [{"cMenuText":"Valentine's Day test","cMenuTypeID":1},
                         {"cMenuText":"User Request","cContentTypeID":8}]
                      };
    </script>

    <ul>
        <script Language="javascript">
            var strCheckBox;
            for( i=0; i<menulist.MenuList.length; i++ ){
                var menuWrapper = menulist.MenuList[i];
                
                document.write("<li class='treeItem' id='db_cartridgeID_contentTypeID'>");
                
                strCheckBox =  "<input type='checkbox'  value='' >";            // ..............(1)                
                
                document.write(strCheckBox+"</li>");
            }
        </script>
    </ul>
</html>

麻烦事就是(1)处value的赋值.本来是想把menuList里的"cMenuText"和"cMenuTypeID"的值拼成一个字符串放到这里的,可拼的过程中总有引号出错的问题.

下面是我试过的几种途径:
1,直接在(1)处把menulist中相应数据拼出来.
    即:value = 'menuWrapper.cMenuText+menuWrapper.cMenuTypeID'

    这样处理后,用firebug看结果如下:
    <li id="db_cartridgeID_contentTypeID" class="treeItem">
        <input type="checkbox" value="menuWrapper.cMenuText+menuWrapper.cMenuTypeID"/>
    </li>

    这显然不对,浏览器根本就没有解析menuWrapper.cMenuText而直接把它当字符串放在这里.

2,在(1)处拼串时去掉单引号,即:
    value = menuWrapper.cMenuText+menuWrapper.cMenuTypeID

    结果与上面的一样:
    <li id="db_cartridgeID_contentTypeID" class="treeItem">
        <input type="checkbox" value="menuWrapper.cMenuText+menuWrapper.cMenuTypeID"/>
    </li>

3,把(1)处的整个一句改为:
    strCheckBox =  "<input type='checkbox'  value = "+menuWrapper.cMenuText+menuWrapper.cMenuTypeID + "/>";        

    这样比上面的两个好些,结果如下:
    <li id="db_cartridgeID_contentTypeID" class="treeItem">
        <input type="checkbox" test1="" day="" value="Valentine's"/>
    </li>

    到这里问题引出来了,也就是menuWrapper.cMenuText的值,也就是"Valentine's Day test"在浏览器里被拆开了,而这个拆的过程是以空格和单引号为delimitor,这样与HTML自身的单引号或空格就混了从而造成了HTML里有了test1和day这样的属性.

.............................

写到这里也渐渐清晰了,这个问题实际上与JSON一点关系都没有,问题的根本在于用JavaScript操作HTML时单(双)引号的问题.
1
0
分享到:
评论
4 楼 wangyu 2009-02-20  
请问你的单(双)引号的问题怎么解决的呢? 我今天也遇到这个问题,能不能交流一下.
3 楼 rmn190 2008-03-27  
myData = JSON.parse(text, function (key, value) {
        return key.indexOf('date') >= 0 ? new Date(value) : value;
});

完全可以利用这个function来将引号进行转义处理嘛.

http://www.json.org/js.html
2 楼 rmn190 2008-03-27  
A string is a collection of zero or more Unicode characters, wrapped in double quotes, using backslash escapes(http://www.json.org/):

这里提到了"using backslash escapes",这样那个单双引号问题就可以解决了.

前一步想,是不是在JSON的各种语言支持里是否有这种自动转义的处理method呢?

1 楼 rmn190 2008-03-27  

var item = "<li><img src='../images/bullet_toggle_plus.png' width='18' height='18' class='expandImage' /><img class=folderImage src='../images/folder.png' /><span class='textHolder'>"+newNodeName+
                               "</span>"+
                               "<input type='checkbox' id = "+newNodeName+"_"+
                               "_box_menu class='categoryNodeSelector' value='"+ nodeValue +"'/>"+
                               newNodeOrder + " : " + newNodeStartDate + " - " + treatedNodeEndDate +"</li>";

                    var branches = $(item).appendTo("#cartridge");

相关推荐

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    - 安全性:在进行数据交换时,需要考虑防止XSS攻击,json-lib提供了相应的安全处理机制。 2. **struts2-json-plugin-2.1.8.1.jar**: - 插件集成:此插件使得Struts 2可以无缝集成JSON支持,无需额外的配置。 - ...

    Java中使用Json的net.sf.json包

    为了在Java中处理JSON数据,开发者通常会使用特定的库,如`net.sf.json`包,这是一个非常实用的JSON库,提供了丰富的功能来创建、解析和操作JSON对象。 `net.sf.json`库主要包含了两个核心类:`JSONObject`和`...

    com.alibaba.fastjson.JSON , net.sf.json.JSONObject

    在Java开发中,处理JSON数据时通常会用到一些库,如`com.alibaba.fastjson.JSON` 和 `net.sf.json.JSONObject`。这两个库分别是阿里巴巴的Fastjson和Eclipse的Json-lib。 首先,我们来详细了解一下`...

    json-c-0.3.tar.gz_JSON_json linux_json-c_linux json

    使用JSON-C库时,首先需要在项目中包含头文件`#include &lt;json/json.h&gt;`,然后利用库提供的API,如`json_object_new_string()`创建一个JSON字符串,`json_object_get_string()`获取JSON对象中的字符串值,等等。...

    JSON net.sf.json jar包

    这在处理前后端交互或者内部数据存储时非常有用。 2. **自动类型转换**:`net.sf.json`库可以自动识别并处理各种Java类型,如基本类型、自定义类、数组、集合等,使得JSON转换过程更为简单。 3. **JSON操作**:...

    json-c-0.12.1.tar.gz

    5. **在Linux上的使用**:在Linux系统中,JSON-C库可以被其他软件或服务调用,例如网络服务、数据分析工具等,以处理JSON格式的输入或输出。开发者可以通过链接到JSON-C库来集成JSON处理功能。 6. **版本0.12.1**:...

    C#解析json的Newtonsoft.Json.dll各种.net版本

    在.NET开发领域,C#语言提供了多种方式来处理JSON数据,其中最受欢迎的库之一就是Newtonsoft.Json.dll。这个库由James Newton-King 开发,它为C#开发者提供了丰富的功能,便于序列化和反序列化JSON,使得JSON数据在...

    JSON(net.sf.json.JSONArray)需要的jar包

    在标题中提到的"JSON(net.sf.json.JSONArray)需要的jar包",是指为了在Java项目中使用`net.sf.json.JSONArray`以及相关的JSON类,你需要引入特定的jar包。`net.sf.json.JSONArray`是开源项目Apache licensed Json-...

    JSONObject解析json,C# asp.net JSON解析 com.force.json

    在这个例子中,我们使用`JSONObject.Parse`方法解析JSON字符串,并通过键来获取对应的值。注意类型转换,因为`JSONObject`中的值默认为`dynamic`类型,我们需要显式转换为实际类型。 此外,`com.force.json`还支持...

    json-c0.13.1Release.rar

    7. **注意事项**:在使用json-c库时,需要注意内存管理和异常处理,避免因JSON数据结构复杂而引发的内存泄漏或错误。同时,要确保输入的JSON数据格式正确,避免解析错误。 总之,json-c0.13.1Release.rar是一个针对...

    Newtonsoft.Json.dll 4.5.0.0 版本

    5. **高性能**:Newtonsoft.Json.dll在性能上进行了优化,处理大规模数据时仍能保持高效,减少了CPU和内存的消耗。 6. **灵活性**:库还支持自定义日期格式、忽略空值、忽略未知属性等多种选项,可以根据项目需求...

    Newtonsoft.Json.dll,Newtonsoft.Json.xml

    在开发过程中,如果你遇到了 Json.NET 使用上的问题或者需要更详细的信息,可以查看 Newtonsoft.Json.xml 文件。如果你使用的是支持 XML 文档的 IDE,它会自动解析这个文件,为代码中的相关函数提供上下文帮助和文档...

    json_simple-1.1.jar

    java中使用JSON封装需要的json_simple jar包

    Jquery.json.js

    然而,随着JSON支持成为JavaScript语言标准的一部分,现代浏览器都内置了`JSON.parse()`方法,这通常被认为更安全且推荐使用。例如: ```javascript var jsonString = '{"name":"John", "age":30, "city":"New York...

    json-lib-2.3.jar

    在使用json-lib时,通常会涉及到以下几个关键概念: 1. **JsonArray**: 表示JSON数组,可以包含零个或多个JsonObject或其他Json元素。 2. **JsonObject**: 表示JSON对象,由键值对组成,键是字符串,值可以是各种...

    System.Json.dll(附带LitJson.dll)动态链接库

    System.Json.dll和LitJson.dll是两个在开发过程中处理JSON数据时常见的库,尤其在Unity3d游戏引擎的C#环境中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于网络通信和数据存储,因为它...

    JsonNet.9.0.1.unitypackage.zip

    导入后,JsonNet的相关类库将可供项目使用,例如`Newtonsoft.Json.Linq.JObject`和`Newtonsoft.Json.JsonConvert`等,这些类可以帮助开发者执行JSON序列化和反序列化。 总之,JsonNet.9.0.1.unitypackage.zip是一个...

    JSON2.JS JSON.JS JSON_PARSE.JS

    cycle.js: This file contains two functions, JSON.decycle and JSON.retrocycle, which make it possible to encode cyclical structures and dags in JSON, and to then recover them. JSONPath is used to ...

    struts2-json-plugin-2.3.8.jar

    在Action类中,定义返回JSON数据的方法,并在方法上添加相应的注解,这样当用户请求该Action时,服务器就会返回JSON格式的响应。 总结来说,Struts2 JSON Plugin 2.3.8是Struts2框架与JSON数据交换的重要桥梁,通过...

Global site tag (gtag.js) - Google Analytics