`

修正后的生成json字符串的java类

    博客分类:
  • J2SE
阅读更多
转载:http://www.gold98.net/blog/article.asp?id=676
记得以前写过一篇关于生成json字符串的java类,因为用的比较少,所以也没有深究,最近学习EXT,在它的使用中也着重提到了json,于是决定好好学习一下,此外还有另外一个原因,那就是xml解析有时确实有点繁琐....

以前的java类是参考.net版的json类写出来的,我返回过json字符串,但一直没有发现其中的问题,今天在学习时终于发现原有的类中有一点小小的问题:

下面是修正后的java类:
package com.zb.database.util;

import java.util.ArrayList;

public class Json {

    public static void main(String[] args) {

    }
    
    public String singleInfo="";
    protected boolean _success=true;
    protected String _error="";
    protected ArrayList arrData=new ArrayList();
    protected ArrayList dataItem=new ArrayList();
    public String getError() {
        return _error;
    }
    public void setError(String error) {
        if(!error.equals(""))this._success=false;
        this._error = error;
    }
    public boolean getSuccess() {
        return _success;
    }
    public void setSuccess(boolean success) {
        if(success) this._error="";
        this._success = success;
    }
    
    public Json()
    {
        
    }
    
    public void reSet()
    {
        arrData.clear();
        dataItem.clear();
    }
    
    public void addItem(String name,String _value)
    {
        dataItem.add(name);
        dataItem.add(_value);
    }
    
    //一个数组添加完毕,一个新的数组开始
    public void addItemOk()
    {
        arrData.add(dataItem);
        dataItem=new ArrayList();
    }
    
    public String ToString()
    {
        StringBuilder sb=new StringBuilder();
        sb.append("{");
        sb.append("\"datas\":");
        sb.append("[");
        int ad=arrData.size();
        for(int i=0;i<ad;i++)
        {
            ArrayList arr=(ArrayList)(arrData.get(i));
            sb.append("{");
            int t=arr.size();
            for(int j=0;j<t;j+=2)
            {
                if(j==t) break;
                sb.append("\"");
                sb.append(arr.get(j).toString());
                sb.append("\"");
                sb.append(":");
                sb.append("\"");
                sb.append(arr.get(j+1).toString());
                sb.append("\"");
                if(j<t-2) sb.append(",");
            }
            sb.append("}");
            if(i<ad-1) sb.append(",");
        }
        sb.append("]");
        sb.append("}");
        return sb.toString();
    }
    
 }


类中本来有一个:_success、_error的,是一组标记,但感觉在实际中没什么很大的作用,于是在生成字符串时去掉了,在原有的类中,我没有把所有的键名都用双引号引起来,后来在解析时出了问题,于是都给加上了,此外,原来为了输出整齐好看,我故意加入了<br>,这算是一个致命错误了,在实际中根本不需要用alert输出整个json字符串对象的值的,而且那只是为了跟踪输出的一个特例而已,真是有点画蛇添足的味道...

下面我们结合数据库来写一个输出json字符串的jsp文件:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="com.zb.database.util.DB,java.sql.*,com.zb.database.util.Json" %>
<%
    response.setContentType("text/html");
    out.clear();
    out.clearBuffer();
    DB db=new DB();
    Connection conn=db.getSQLConnection();
    Statement st=conn.createStatement();
    ResultSet rs=st.executeQuery("select * from product ");
    Json json=new Json();
    json.reSet();
    json.setSuccess(true);
     while(rs.next())
    {
        json.addItem("a",(new Integer(rs.getInt(1))).toString());
        json.addItem("b",rs.getString(2));
        json.addItem("c",rs.getString(3));
        json.addItem("d",(new Integer(rs.getInt(4))).toString());
        json.addItem("e",rs.getDate(5).toString());
        json.addItem("f",rs.getString(6));
        json.addItemOk();
    }
    out.println(json.ToString());
%>


接下来我们用prototype实现ajax来测试结果:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>prototype测试 ajax测试</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>

  <script language="javascript" src="js/prototype.js"></script>
  
  
  <script>
  function sendRequest() {   
      var url = "http://localhost:8088/json/testgetjson.jsp";   
     var mailAjax = new Ajax.Request(   
          url,   
          {   
          method: 'get',   
          onComplete: jsonResponse   
          }   
      );   
   }   
  function jsonResponse(originalRequest) {
    var div=document.getElementById("getrequest"); 
    var jsondiv=document.getElementById("jsondiv");
    div.innerHTML= originalRequest.responseText; 
    jsondiv.innerHTML = originalRequest.responseText.evalJSON(true).datas[0].a;
   }  
</script>
  <body>
   <div id="getrequest">
   </div>
   <br><br>
   <div id="jsondiv">Ok
   </div>
   <input type="submit" name="smt" id="smt" value="发送请求" onclick="sendRequest()">
   <br>
  </body>
</html>

分享到:
评论

相关推荐

    Java中JSON字符串与java对象的互换实例详解

    在Java中实现JSON字符串与Java对象互换的关键知识点包括以下几个方面: 1. 数据交换的必要性: 在Java开发中,经常需要与其他系统进行数据交互。常见的数据交换格式包括XML和JSON。与XML相比,JSON格式更轻量级,...

    json 学习笔记_20140116.pdf

    在文档中,我们可以看到使用json-lib将Java对象转换成JSON字符串的过程。文档中的示例代码同样创建了一个Java对象,并通过JSONUtil的serialize方法将其转换为JSON字符串。值得注意的是,在处理JSON数据时,如果Java...

    json格式测试

    “将json数据复制到页面源代码上就可以测试了”进一步说明了使用方法,用户只需将待验证的JSON字符串复制并粘贴到网页提供的输入框内,然后提交或者按下相应的按钮,系统就会自动分析JSON数据的语法结构,如果存在...

    java常用并集交集使用.doc

    1. 检查并修正JSON字符串的格式。 2. 确保JSON字段类型与Java对象字段类型匹配,或者在解析时提供自定义的转换器。 3. 对于自定义类型,使用`TypeReference`指定类型信息,或者在字段上添加`@JSONField( deserialize...

    解析json的jar包:jackson-core2.9.9、jackson-annotations2.9.9、jackson-databind2.9.9

    `ObjectMapper`是databind模块的核心类,它可以将任何Java对象转换为JSON字符串,反之亦然。此外,`@JsonAutoDetect`、`@JsonInclude`、`@JsonTypeInfo`等高级注解也在此模块中,允许更复杂的类型处理和序列化配置。...

    添加json所报的异常

    3. **序列化异常**:将Java对象转换为JSON字符串时,如果对象包含不可序列化的属性,也会引发异常。例如,自定义类没有实现`Serializable`接口,或者包含`transient`字段。解决方法是确保所有需要序列化的类都实现`...

    HiJson 辅助工具.zip

    然而,手动处理JSON字符串往往繁琐且易出错,这就催生了各种JSON解析和生成工具的出现。其中,"HiJson"是一款专为程序员打造的高效JSON辅助工具,它以其便捷实用的特点深受开发者喜爱。 HiJson 2.1.2_jdk64.exe 是...

    JAVA 根据数据库表内容生产树结构JSON数据的实例代码

    Fastjson是一个性能很好的Java语言编写的JSON处理库,它可以很容易地将Java对象转化为JSON格式的字符串,或者将JSON字符串转化为Java对象。在本实例中,Fastjson被用来将Tree对象数组转化为JSON字符串。 代码实现的...

    java二维码工具类+jar包

    2. 创建二维码内容:确定要生成二维码的数据,可以是字符串、URL、JSON对象等。 3. 生成二维码:使用工具类中的方法,传入数据和设置参数(如二维码尺寸、纠错级别、背景色、前景色等)生成二维码图像。例如: ```...

    HiJson win64

    - **错误检查**:在输入JSON字符串时,HiJson可以进行语法检查,指出潜在的错误,帮助用户及时修正。 - **复制与粘贴**:支持快速复制JSON数据到其他应用程序,或者从剪贴板粘贴JSON内容进行格式化。 - **跨平台...

    17-数据清洗-清洗电商评论数据1

    3. 解析Json数据时,可以使用编程语言提供的Json解析函数,例如Python的`json.loads()`,将Json字符串转化为可操作的对象,然后遍历和提取所需字段。 三、数据清洗实战 1. 删除重复数据:使用哈希表或集合(如...

    command-generator:我的世界命令生成器

    4. **字符串操作**:生成命令字符串时,会用到大量的字符串拼接和格式化技术,如使用模板字符串 (` `${}`) 或 `concat()` 方法。 5. **正则表达式**:用于验证用户输入,确保它们符合游戏命令的要求,比如限制字符...

    jsp中将后台传递过来的json格式的list数据绑定到下拉菜单select

    这个List集合可能包含自定义对象,或者简单地是带有文件路径信息的字符串集合。 - 然后,后台代码需要将这个List集合放入request作用域中,以供JSP页面使用。这通常通过调用request.setAttribute方法实现。 - 在...

    清华大学精品大数据之数据清洗课程PPT课件(26页)含习题 第2章 数据格式与编码.pptx

    2. **文本类型**(字符和字符串):字符(char)存储单个字符,字符串(String)存储多个字符。 3. **整数类型**(byte、short、int、long):用于存储有符号整数,不同类型有不同的取值范围。 4. **浮点类型**...

    Servlet 与 Ajax 交互一直报status=parsererror的解决办法

    在Servlet中,我们应使用PrintWriter输出流来构造一个正确的JSON字符串。例如,在doPost方法中,可以通过以下代码来设置响应内容: ```java PrintWriter out = response.getWriter(); String jsonStr = "{\"success...

    精彩编程与编程技巧-显示程序的版本...

    此函数通过读取`App.Major`、`App.Minor`和`App.Revision`等属性来构造版本字符串。 #### 2. **利用编译器或构建工具自动生成** - 大多数现代编译器(如C++、Java等)支持在编译时自动插入版本信息到二进制文件中...

    excel通过配置实现导入导出和校验

    配置文件可以定义多种校验策略,包括基本类型的校验(如字符串长度、数字范围)、逻辑校验(如必填项、唯一性)、关联校验(如参照其他表的值)。通过这种方式,我们可以在导入数据前就发现并修正问题,避免对数据库...

    jsoup的jar和源码,帮助文档

    jsoup支持CSS选择器,这意味着你可以像使用jQuery那样,通过简单的字符串表达式选取HTML中的特定部分。例如,`doc.select("div.title")`将选取所有类名为“title”的`&lt;div&gt;`元素。 **DOM操作** jsoup允许开发者对...

    mybatis mysql delete in操作只能删除第一条数据的方法

    这里,`customerId`参数是一个包含逗号分隔的ID字符串,通过`substring`和`split`方法转换为整数数组`arr`,然后传递给服务层进行批量删除操作。 总结: 当在MyBatis中使用`DELETE IN`操作遇到只能删除第一条数据的...

Global site tag (gtag.js) - Google Analytics