`

Json 添加元素拼接JSON字符串(转)

    博客分类:
  • java
 
阅读更多
package com.util;

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());
    }
}

 

分享到:
评论

相关推荐

    C# json格式解析,Json格式字符串与C#对象相互转换,类库+使用案例,注释详细

    /// 将Json字符串解析为C#中的对象 /// Json格式中的字符串值识别 /// 将Json字符串解析为Dictionary, dynamic&gt;对象。 /// 将Json字符串解析为dynamic[]对象。 /// Dictionary类型对象转换为Json格式字符串 /// C#...

    CPP转Json字符串

    标准json字符串编码使用unicode,即boost 提供的 中拼接起来的字符串采用unicode字符集编码,而很多网页采用编码为utf8。 这个库字符编码采用系统编码,系统采用utf8字符集的话拼接起来字符串就是ut8了;另外在博客...

    jquery拼接ajax 的json和字符串拼接的方法

    整理文档,搜刮出一个jquery拼接ajax 的json和字符串拼接的代码,稍微整理精简一下做下分享。 jQuery拼接字符串ajax &lt;form id="myForm" action="#"&gt; &lt;input name="name"/&gt; &lt;input name="age"/&gt;...

    多层集合的JSON串拼接

    在"多层集合的JSON串拼接"这个主题中,我们主要关注的是如何将多个JSON对象或数组合并成一个复杂结构的JSON字符串。这通常涉及到后台Java的处理和前台JavaScript的调用。以下是一些关键知识点: 1. **JSON对象与...

    Pbjson字符串生成与解析

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

    C语言json字符串的生成与解析

    在C语言中,处理JSON字符串涉及到解析JSON文本为数据结构,以及将数据结构转换为JSON字符串。以下是对C语言中JSON字符串生成与解析的详细说明: 1. JSON数据格式: JSON是一种基于文本的格式,它使用键值对来表示...

    C++解析json字符串

    C++作为一款强大的系统编程语言,虽然原生并不支持JSON解析,但有多种库可以用来处理JSON字符串。本主题将深入探讨如何在C++中解析JSON字符串,主要涉及以下几个知识点: 1. **JSON基本结构**:JSON数据由键值对...

    把数据库的table表转换成json格式的字符串

    给出的C#代码片段展示了如何将`DataTable`对象转换为JSON字符串。`DataTable`是.NET Framework中用于存储、检索和操作数据的一种方式,类似于关系数据库中的表。让我们逐行分析代码: ```csharp public static ...

    json字符串转table字符串

    1. **解析JSON字符串**:首先,我们需要使用JSON库解析JSON字符串,将其转化为JSON对象或JSON数组。例如,`json-lib`库提供了`JsonUtil`类,可以将JSON字符串转换为Java集合对象,如List或Map。 2. **转换数据结构*...

    JSONObject:一款强大的JSON工具,支持Json文件拼接

    例如,尝试访问不存在的键或解析无效的JSON字符串都会抛出这个异常。 在给定的压缩包文件“JSON(1)”中,可能包含了多个JSON文件示例,你可以使用`JSONObject`来读取、解析和操作这些文件,实现JSON数据的拼接和...

    vb6 collection dictionary与json字符串间转换

    vb6 collection dictionary与json字符串间转换

    实用小工具:Java实体类对比、Json对比、字符串动态拼接等功能

    对比两个JSON对象,可以使用Jackson库的ObjectMapper或者Gson库的fromJson方法将JSON字符串转换为Java对象,然后进行对象间的比较。也可以使用专门的JSON对比工具,如json-unit,它提供了一套API来比较两个JSON对象...

    下载JSON时候如何拼JSON字符串

    ### 下载JSON时如何拼接JSON字符串 在互联网项目的开发过程中,经常需要处理JSON数据的生成与下载。本文将详细解析一个具体的示例代码,并基于此示例介绍如何正确地构建JSON字符串,以便于后续的数据处理及下载操作...

    java实现二维数组转json的方法示例

    例如,使用Gson库,你可以创建一个`Blog`类来表示博客信息,然后将二维数组转换为`List&lt;Blog&gt;`,再使用Gson的`toJson`方法生成JSON字符串: ```java import com.google.gson.Gson; public class Blog { private ...

    js与jQuery实现获取table中的数据并拼成json字符串操作示例.docx

    接着,我们使用一个for循环遍历tr元素,并在每次循环中获取td元素数组,然后使用拼接的方式将数据拼成JSON字符串。最后,我们使用substring方法将拼接的JSON字符串截断,形成一个完整的JSON数组。 在该示例中,我们...

    json拼接和解析

    JSON拼接是指将多个JSON对象或数组合并成一个单一的JSON字符串。在JavaScript中,我们可以使用内置的`JSON.stringify()`方法来将JavaScript对象转换为JSON字符串,然后通过字符串操作进行拼接。例如: ```...

    c#中把DataTable、Dataset转Json数据.docx

    为了将DataTable转换为Json数据,我们可以使用StringBuilder来拼接Json字符串。下面是一个示例代码: ```csharp public static string DataTableToJson1(string jsonName, DataTable dt) { StringBuilder Json = ...

    字符串与二维码之间的相互转换

    字符串操作是编程中的基本任务,包括拼接、分割、查找、替换等。 接着,我们转向二维码。二维码(Quick Response Code)是一种源自日本的二维条形码,它由黑白相间的模块组成,能够存储文本、网址、联系信息等多种...

    各种对象转成JSON字符串.pdf

    1. **对象转JSON字符串**: `object2json`方法是整个工具类的核心,它接受一个`Object`类型的参数`obj`,根据`obj`的类型来决定如何将其转换为JSON字符串。如果对象为null,它返回一个空字符串。对于基本数据类型...

    kettle解析json串

    // 解析JSON字符串为JSONObject JSONObject subObject = (JSONObject) parser.parse(jsonContent); // 遍历JSON对象的键值对 Iterator&lt;String&gt; itt = subObject.keySet().iterator(); while (itt.hasNext()) { ...

Global site tag (gtag.js) - Google Analytics