将Array格式的数据解析成JSON格式的数据

在编程的过程中,数据的传输格式如何,会影响开发的效率和后期代码的维护, 并且现在许多的js中支持了JSON格式的数据,

比如angular、nodejs。本篇文章主要讲解Array(数组)形式数据的解析。其它格式的数据会在后续的文章中进行书写。

(1)定义一个解析Array的类JSONArray。

public class JSONArray {
  @SuppressWarnings("unchecked")
  public static String toJSONString(List paramList){
    //if param is null or "", return
    if( null==paramList || 0==paramList.size() ){
      return "null"; 
    }
    StringBuffer sb = new StringBuffer();
    boolean isFirstEle = true;//list参数是不是首个参数
    Iterator iterator = paramList.iterator();
    sb.append("[");
    while(iterator.hasNext()){
      //check is first element
      if(isFirstEle){
        isFirstEle = false;
      }else{
        sb.append(",");
      }  

      Object element = iterator.next();
      if( null==element){
        sb.append("null");
      }else{
        sb.append(JSONValue.toJSONString(element));
      }
    }
    sb.append("]");
    return sb.toString();
  }

}

(2) 定义一个解析各种类型数据的类JSONValue。

package com.ityongman.base;

import java.util.List;
import java.util.Map;

public class JSONValue {
  public static String toJSONString(Object paramObject) {
    if( null==paramObject ){
      return "null";
    }
    if( paramObject instanceof String ){
      return "\"" + escape( (String)paramObject ) + "\"";
    }

    if( paramObject instanceof Double){
      if( ((Double)paramObject).isInfinite() || ((Double)paramObject).isNaN() ){
        return "null";
      }
      return paramObject.toString();
    }
    if( paramObject instanceof Float ){
      if( ((Float)paramObject).isInfinite() || ((Float)paramObject).isNaN() ){
       return "null";
      }
      return paramObject.toString();
    }
    if( paramObject instanceof Number ){
      return paramObject.toString();
    }
    if( paramObject instanceof JSONAware ){
      return ((JSONAware)paramObject).toJSONString();
    }
    if( paramObject instanceof Map){
      return JSONMap.toString( (Map)paramObject );
    }
    if( paramObject instanceof List){
      return JSONArray.toJSONString((List)(paramObject));
    }

    return paramObject.toString();
  }

  private static String escape(String paramString) {
    if( null == paramString ){
      return null;
    }
    StringBuffer sb = new StringBuffer();
    escape(paramString,sb);
    return sb.toString();
  }

  static void escape(String paramString, StringBuffer sb_param) {
    // TODO Auto-generated method stub

    for(int i=0;i<paramString.length();i++){
      int asciindex = paramString.charAt(i);
      switch(asciindex){
      case 8: // \b
        sb_param.append("\\b");
        break;
      case 9: // \t--水平制表符
        sb_param.append("\\t");
        break;
      case 12: // \f
        sb_param.append("\\f");
        break;
      case 10: // "
        sb_param.append("\\n");
        break;
      case 13: // "
        sb_param.append("\\r");
        break;
      case 34: // "--文件分隔符
        sb_param.append("\\\"");
        break;
      case 47: // ‘--闭单引号
        sb_param.append("\\/");
        break;
      case 92: // \--反斜线
        sb_param.append("\\\\");
        break;
      default:
        if (((asciindex >= 0) && (asciindex <= 31)) || ((asciindex >= 127) && (asciindex <= 159)) || ((asciindex >= 8192) && (asciindex <= 8447))){
          String str = Integer.toHexString(asciindex);
          sb_param.append("\\u");
          for (int k = 0; k < 4 - str.length(); k++){
            sb_param.append(‘0‘);
          }
          sb_param.append(str.toUpperCase());
        }else{
          sb_param.append(asciindex);
        }
        break;
      }
    }

  }

}

(3)常见的数据类型有List, Map,String,Double, Float, Number; 上面的代码没有对Map进行处理,所以下面提供对Map的处理类JSONMap。

package com.ityongman.base;

import java.util.Iterator;
import java.util.Map;

public class JSONMap {

    public static String toString(Map paramMap) {
    // TODO
        if( null==paramMap || 0==paramMap.size() ){
          return "null";
        }
        StringBuffer sb = new StringBuffer();
        boolean isFirstEle = true;
        Iterator iterator = paramMap.entrySet().iterator();
        sb.append("{");
        while( iterator.hasNext() ){
          if( isFirstEle ){
            isFirstEle = false;
          }else{
            sb.append(",");
          }
          Map.Entry entity = (Map.Entry)iterator.next();
          toJSONString(String.valueOf(entity.getKey()), entity.getValue(),sb);
        }

        sb.append("}");
        return sb.toString();
      }

    private static String toJSONString(String paramString, Object paramValue,
       StringBuffer sb_param) {
      sb_param.append("\"");
      if( null==paramString || 0==paramString.length() ){
        sb_param.append("null");
      }else{
        JSONValue.escape(paramString,sb_param);
      }
      sb_param.append("\"").append(":");
      sb_param.append(JSONValue.toJSONString(paramValue));

      return sb_param.toString();
    }
}

(4)上面涉及到一个JSONAware类,它是接口,很多其它类对实现(implements)它,下面是具体的代码。

package com.ityongman.base;

public abstract interface JSONAware {
  public abstract String toJSONString();
}

总结:数据格式的转换是经常遇到的问题,尤其是JSON格式的数据,这会给我们带来许多的便利,所以提供者这个类的帮助类。

时间: 2024-10-12 08:42:30

将Array格式的数据解析成JSON格式的数据的相关文章

java 调用wsdl接口同时将返回数据解析成json

package com.haiersoft.ushequmobile.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.List; import java.util.Map; imp

数据库取的数据打包成json然后传值到前端

后端用get或者post从数据库取的数据如何打包成json: 需要下载json的jar包,这里有:http://download.csdn.net/detail/zhangy0329/607838 Connection ct = null; Statement sm = null; ResultSet rs = null; try{ Class.forName("com.mysql.jdbc.Driver"); //连接mysql数据库 ct = DriverManager.getCo

python:将xml格式文件转换成json格式文件

由于json格式的文件在处理起来,有很强的便利性,而工作中每天产生大量的xml格式的文件,所以有需求将xml格式的文件转换成json格式的文件.下面直接贴出代码,有两个版本,根据需求自由选择: #!/usr/bin/python # -*- coding: utf-8 -*- #Function:Xml_To_Json #version 1.0 #Author: Herman #需要用到的两个模块 import xmltodict; import json; #定义函数 def pythonXm

android实现json数据的解析和把数据转换成json格式的字符串

利用android sdk里面的 JSONObject和JSONArray把集合或者普通数据,转换成json格式的字符串 JSONObject和JSONArray解析json格式的字符串为集合或者一般数据 package com.hck.test; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.

java将XML文档转换成json格式数据

功能 将xml文档转换成json格式数据 说明 依赖包: 1. jdom-2.0.2.jar : xml解析工具包; 2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 程序源码 package com.xxx.open.pay.util; import com.alibaba.fastjson.JSONObject; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdo

将json格式的字符串解析成Map对象

/** * 将json格式的字符串解析成Map对象 <li> * json格式:{"name":"admin","retries":"3fff","testname" * :"ddd","testretries":"fffffffff"} */ private static HashMap<String, String> t

logstash解析嵌套json格式数据

logstash解析嵌套json格式数据 1.源文件 1.原日志文件为 2019-10-28 09:49:44:947 [http-nio-8080-exec-23] INFO [siftLog][qewrw123ffwer2323fdsafd] - logTime:2019-10-28 09:49:25.833-receiveTime:2019-10-28 09:49:44.044-{"area":"","frontInitTime":0,&q

php json_encode 将数组转换成json格式数据出错

当用php 的 json_encode 函数将数组转换成json格式的时候,如果该数组是一个索引数组而且数组的索引的顺序不是按照0,1,2...排序的话,在转换成json数据的时候就不能得到你所想要的json数组,而是一个json对象 这个问题是在开发app接口的时候发现的,因为php和app之前是通过json数据格式进行数据通讯的,而app那边对json的数组和对象类型很敏感,本来是数组格式的,可是突然变对象了,导致出错,后来就发现,php这边的索引数组的键名没有按照顺序排序的,导致转成jso

数据类型和Json格式

1. 前几天,我才知道有一种简化的数据交换格式,叫做yaml. 我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开. 它说,从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海".