`
yxgyh
  • 浏览: 275580 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JSON 字符串的工具

    博客分类:
  • JAVA
阅读更多
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * JSON utility class
 *
 * @since 2008-04-21
 */
public class Json {

    // test
    public static void main(String[] args) {
        Json json1 = new Json();
        json1.add("totalCount", 2);
        json1.add("isTest", true);
        
        Json json_a = new Json();
        json_a.add("menuid", 1);
        json_a.add("menuname", "testmenu");
        json1.add("topics", json_a);
        
        Json json_b = new Json();
        json_b.add("menuid", 2);
        json_b.add("menuname", "testmenu");
        json1.add("topics", json_b);
        System.out.println(json1.toString());
    }

    private Map map = new LinkedHashMap();

    /**
     * 添加一个 JSON 属性,值为一个字符串,重复添加时产生数组<p/>
     * 
     * add("name", "value");<br/>
     * 添加一个字符串,产生的 JSON 如:{"name":"value"}<p/>
     * 
     * add("name", "value1");<br/>
     * add("name", "value2");<br/>
     * 添加两个同属性的字符串,产生的 JSON 如:{"name":["value1", "value2"]}<p/>
     * 
     * @param key       JSON 属性名
      * @param str       字符串格式的属性值
      */
    public void add(String key, String value) {
        addElement(key, value);
    }
    
    public void add(String key, int num) {
        addElement(key, new Integer(num));
    }
    
    public void add(String key, boolean b) {
        addElement(key, new Boolean(b));
    }

    /**
     * 添加一个 JSON 属性,值为一个 JSON,重复添加时产生 JSON 数组<p/>
     * 
     * Json json1 = new Json();<br/>
     * json1.add("name1", "value1");<br/>
     * json1.add("name2", "value2");<br/>
     * Json json = new Json();<br/>
     * json.add("message", json1);<br/>
     * 添加一个 JSON,产生的 JSON 如:{"message":{"name1":"value1", "name2":"value2"}}<p/>
     * 
     * Json json1 = new Json();<br/>
     * json1.add("name1", "value1");<br/>
     * json1.add("name2", "value2");<br/>
     * Json json2 = new Json();<br/>
     * json2.add("name1", "value3");<br/>
     * json2.add("name2", "value4");<br/>
     * Json json = new Json();<br/>
     * json.add("message", json1);<br/>
     * json.add("message", json2);<br/>
     * 添加两个同属性的 JSON,产生的 JSON 如:{"message":[{"name1":"value1", "name2":"value2"}, {"name1":"value3", "name2":"value4"}]}<p/>
     * 
     * @param key       JSON 属性名
      * @param json      JSON 格式的属性值
      */
    public void add(String key, Json json) {
        addElement(key, json);
    }

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        int k = 0;
        for (Iterator i = map.keySet().iterator(); i.hasNext();) {
            String key = (String)(i.next());
            Object obj = map.get(key);
            if (k > 0) {
                sb.append(",");
            }
            appendKey(sb, key);
            if (obj instanceof String) {
                appendString(sb, (String)obj);
            } else if (obj instanceof List) {
                appendList(sb, (List)obj);
            } else if (obj instanceof Json) {
                appendJson(sb, (Json)obj);
            } else {
                appendOther(sb, obj);
            }
            k++;
        }
        sb.append("}");
        return sb.toString();
    }

    private void addElement(String key, Object obj) {
        if (!map.containsKey(key)) {
            if(obj instanceof Json) {
                List list = new ArrayList();
                list.add(obj);
                map.put(key, list);
            } else {
                map.put(key, obj);
            }
            return;
        }

        Object o = map.remove(key);

        if (o instanceof List) {
            ((List)o).add(obj);
            map.put(key, o);
            return;
        }

        // o is a String
        List list = new ArrayList();
        list.add(o);
        list.add(obj);
        map.put(key, list);
    }

    /**
     * Append JSON property name
     * 
     * @param sb
     * @param key
     */
    private void appendKey(StringBuilder sb, String key) {
        sb.append("\"").append(key).append("\":");
    }

    /**
     * Append JSON property value that is a String
     * 
     * @param sb
     * @param str
     */
    private void appendString(StringBuilder sb, String str) {
        sb.append("\"").append(str).append("\"");
    }
    
    /**
     * Append JSON property value that is a Integer
     * 
     * @param sb
     * @param num
     */
    private void appendOther(StringBuilder sb, Object obj) {
        sb.append(obj);
    }

    /**
     * Append JSON property value that is a List
     * 
     * @param sb
     * @param list
     */
    private void appendList(StringBuilder sb, List list) {
        sb.append("[");
        for (int j = 0, m = list.size(); j < m; j++) {
            if (j > 0) {
                sb.append(",");
            }
            Object obj = list.get(j);
            if (obj instanceof String) {
                appendString(sb, (String)obj);
            } else if (obj instanceof Json) {
                appendJson(sb, (Json)obj);
            } else {
                appendOther(sb, obj);
            }
        }
        sb.append("]");
    }

    /**
     * Append JSON property value that is a JSON
     * 
     * @param sb
     * @param json
     */
    private void appendJson(StringBuilder sb, Json json) {
        sb.append(json.toString());
    }
}

 

分享到:
评论

相关推荐

    json字符串工具

    JSON字符串工具则是一种专门用来处理JSON格式数据的工具,尤其在调试、分析或展示JSON数据时非常有用。 标题中的"json字符串工具",通常指的是一个软件或在线服务,能够帮助用户查看、编辑、验证和格式化JSON字符串...

    Json对象与json字符串互相转换处理工具

    Json对象与json字符串互相转换处理工具

    androidmap转json字符串、list转json字符串工具类.zip

    总结一下,这个压缩包提供的是两个关键的Java工具类,它们能够帮助Android开发者快速地将Map和List对象转换为JSON字符串。通过理解和使用这些工具,可以提高代码的可读性和效率,简化数据处理流程。在实际项目中,...

    json字符串解析工具

    本文将深入探讨JSON字符串解析工具以及如何使用HiJson 2.1.2_jdk64.exe这个工具来解析JSON数据。 首先,了解JSON的基本结构至关重要。JSON对象由键值对组成,键用双引号包围,后跟冒号,然后是值,所有键值对之间用...

    查看json字符串工具

    本文将深入介绍如何使用“查看json字符串工具”——JsonView,来高效地解析和查看JSON数据。 JsonView是一款便捷的浏览器扩展插件,主要用于在浏览器中以结构化的方式展示JSON数据,使得开发者可以直观地理解数据...

    json字符串格式化工具

    "json字符串格式化工具"是针对JSON数据进行美化和整理的工具,主要功能包括将紧凑的JSON字符串转换为易于阅读的格式,添加缩进、换行,以及高亮显示键值对等。这对于开发者调试API接口、查看JSON响应或者理解复杂...

    json2.js 字符串转转json对象工具

    总的来说,json2.js是解决JSON处理兼容性问题的一个工具,它提供了一种安全且标准化的方式来在JavaScript中进行JSON字符串与对象之间的转换,尤其对于那些不支持原生JSON操作的老版本浏览器而言。

    JSON字符串查看小工具

    JSON字符串查看小工具是为了帮助开发者更方便地查看、理解和解析JSON格式的数据。 在开发过程中,JSON数据的查看和调试是必不可少的环节。JSON查看工具通常具有以下功能: 1. **格式化显示**:将原始的JSON字符串...

    Pbjson字符串生成与解析

    本文将深入探讨Pbjson的使用方法、原理以及它如何处理Json字符串的生成与解析。 首先,让我们了解一下什么是protobuf。Protocol Buffers是Google推出的一种数据序列化协议,它允许我们将结构化数据序列化为二进制...

    json转化工具,字符串格式化工具,方便又快捷

    本工具专注于JSON的转化和格式化,旨在提供一个方便快捷的方式来处理JSON字符串,便于开发者进行数据分析和问题排查。 1. JSON的结构与基本元素: JSON由对象(Object)和数组(Array)两种基本类型构成。对象由...

    json字符串格式化工具JsonView

    json字符串格式化工具,不用安装,直接运行,美化json字符串,方便,快捷。json字符串格式化工具,不用安装,直接运行,美化json字符串,方便,快捷。json字符串格式化工具,不用安装,直接运行,美化json字符串,...

    Json字符串生成工具.zip

    本文将详细介绍C#中如何生成JSON字符串,并结合提供的"Json字符串生成工具.zip"压缩包,分析其中的源码,探讨如何根据实际需求定制自己的工具。 1. JSON对象与数据类型 在JSON中,数据被组织为键值对,即对象,以...

    模仿json,根据对象生成json字符串,根据字符串生成对象

    本文将深入探讨如何模仿JSON,根据对象生成JSON字符串,以及如何根据JSON字符串反向生成对象。 首先,我们要理解JSON的基本结构。一个JSON对象以大括号`{}`包围,其内部由键值对组成,键用双引号`""`包裹,值可以是...

    jsonview, json字符串查看工具

    该工具的一个重要功能是对JSON字符串的校验。当输入的字符串符合JSON格式时,JSONView会成功解析并展示数据。如果字符串格式有误,工具通常会显示错误提示,帮助开发者快速定位并修复问题。这在调试API接口或处理...

    格式化json字符串工具

    可以快速格式化json字符串数据,方便快捷复制key以及value

    Json字符串格式化工具

    这类工具可以帮助开发者将原始的、紧凑的JSON字符串转换成可读性更强的格式,通过增加缩进和换行来清晰地展示数据结构,便于理解和调试。 描述中提到的“Json字符串格式化工具”同样强调了这一点。在实际开发中,...

    很好的一款解析Json字符串的工具

    本文将深入探讨“很好的一款解析Json字符串的工具”,它如何帮助开发者便捷地解析接口返回的Json字符串,并了解与之相关的Gson库。 标题中的“很好的一款解析Json字符串的工具”指的是一个高效、易用的软件或插件,...

    JSON字符串解析工具JsonView

    JsonView是一款专为帮助用户解析JSON字符串的工具,尤其对开发者而言,它简化了查看和理解JSON数据结构的过程。 JsonView的主要功能包括: 1. **清晰展示**: JsonView能够将复杂的JSON数据以树状结构展示,使得...

    java中操作json字符串的工具类

    - commons-beanutils-1.8.0.jar - commons-collections-3.1.jar - commons-lang-2.5.jar - commons-logging-1.2.jar - ezmorph-1.0.6.jar - json-lib-2.4-jdk15.jar

    json字符串转换插件

    本篇将深入探讨“json字符串转换插件”,重点介绍如何在项目中引入和使用这类工具。 首先,我们来理解JSON的基本结构。JSON基于JavaScript的一个子集,它使用键值对(key-value pairs)的形式来表示数据,支持数组...

Global site tag (gtag.js) - Google Analytics