生成 JSON 字符串的工具

本文介绍了一个实用的 Java 类,用于简化 JSON 对象的创建和操作过程。该类支持添加不同类型的属性值,包括字符串、整数、布尔值及嵌套 JSON 对象,并能自动处理重复属性的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值