Java-Json的格式化和转参数表格
Posted 十木禾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-Json的格式化和转参数表格相关的知识,希望对你有一定的参考价值。
首先感谢 ShowDoc 这个网站提供的帮助,然后里面有两个功能Json的格式化和转参数表格,在这里我使用Java代码来实现,以便于我们使用相应的开放接口功能。
Json美化代码本人参考网上代码,Json转参数表格代码全部由本人完成开发。
首先需要下载 fastjson-1.1.41.jar 并导入到项目中去。
封装后的工具类代码如下(可直接复制使用):
package com.test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.TypeReference;
import org.apache.http.util.TextUtils;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Stack;
/**
* Created by 张俊强~ on 2017/10/17.
*/
public class JSONUtils
private static String SPACE = " ";
private static Stack<String> tableStack = new Stack<String>();
private static Integer tableLevel = 0; //标志当前table的层级
public final static int JSON_TYPE_OBJECT=1;
public final static int JSON_TYPE_ARRAY=2;
public final static int JSON_TYPE_ERROR=3;
/**
* 返回格式化JSON字符串.
*
* @param json 未格式化的JSON字符串.
* @return 格式化的JSON字符串 .
*/
public static String formatJson(String json)
StringBuffer result = new StringBuffer();
int length = json.length();
int number = 0;
char key = 0;
//遍历输入字符串。
for (int i = 0; i < length; i++)
//1、获取当前字符。
key = json.charAt(i);
//2、如果当前字符是前方括号、前花括号做如下处理:
if ((key == '[') || (key == ''))
//(1)打印:当前字符。
result.append(key);
//(2)前方括号、前花括号,的后面必须换行。打印:换行。
result.append('\\n');
//(3)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
number++;
result.append(indent(number));
//(4)进行下一次循环。
continue;
//3、如果当前字符是后方括号、后花括号做如下处理:
if ((key == ']') || (key == ''))
//(1)后方括号、后花括号,的前面必须换行。打印:换行。
result.append('\\n');
//(2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
number--;
result.append(indent(number));
//(3)打印:当前字符。
result.append(key);
//(4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
if (((i + 1) < length) && (json.charAt(i + 1) != ','))
result.append('\\n');
//(5)继续下一次循环。
continue;
//4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
if ((key == ','))
result.append(key);
result.append('\\n');
result.append(indent(number));
continue;
//5、打印:当前字符。
result.append(key);
return result.toString();
/**
* 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE.
*
* @param number 缩进次数.
* @return 指定缩进次数的字符串.
*/
private static String indent(int number)
StringBuffer result = new StringBuffer();
for (int i = 0; i < number; i++)
result.append(SPACE);
return result.toString();
/**
* 将json转参数表格.
*
* @param json 未格式化的JSON字符串.
* @return the string
*/
public static String formatJsonToTable(String json)
tableLevel++;
String result = "";
LinkedHashMap<String, String> jsonMap = JSON.parseObject(json, new TypeReference<LinkedHashMap<String, String>>()
);
for (Map.Entry<String, String> entry : jsonMap.entrySet())
tableStack.add("|" + entry.getKey() + "| string | 是 | 无 |\\n");
switch (getJSONType(entry.getValue()))
case JSONUtils.JSON_TYPE_ARRAY:
JSONArray jsonArray = JSON.parseArray(entry.getValue().toString());
if (jsonArray.size() > 0)
tableStack.pop();
String listPre = "";
for (int i = 0; i < tableLevel; i++)
listPre += " -";
tableStack.add("|" + listPre + " " + entry.getKey() + "| object | 是 | 无 |\\n");
for (int i = 0; i < jsonArray.size(); i++)
formatJsonToTable(jsonArray.get(i).toString());
break;
case JSONUtils.JSON_TYPE_OBJECT:
formatJsonToTable(entry.getValue());
break;
case JSONUtils.JSON_TYPE_ERROR:
break;
default:
break;
tableLevel--;
if (tableLevel == 0)
for (int i = 0; i < tableStack.size(); i++)
result += tableStack.get(i);
return result;
public static int getJSONType(String str)
if (TextUtils.isEmpty(str))
return JSONUtils.JSON_TYPE_ERROR;
final char[] strChar = str.substring(0, 1).toCharArray();
final char firstChar = strChar[0];
if (firstChar == '')
return JSONUtils.JSON_TYPE_OBJECT;
else if (firstChar == '[')
return JSONUtils.JSON_TYPE_ARRAY;
else
return JSONUtils.JSON_TYPE_ERROR;
如下未格式化的Json为例:
"fields":["field":"task_number","op":"like","value":"20"],"page":1,"size":10
格式化之后如下:
"fields":[
"field":"task_number",
"op":"like",
"value":"20"
],
"page":1,
"size":10
转参数表格之后如下:
| - fields| object | 是 | 无 |
|field| string | 是 | 无 |
|op| string | 是 | 无 |
|value| string | 是 | 无 |
|page| string | 是 | 无 |
|size| string | 是 | 无 |
在参数表格上加上头信息,即是md格式,可解析如下:
参数名 | 类型 | 必选 | 说明 |
---|---|---|---|
| object | 是 | 无 |
field | string | 是 | 无 |
op | string | 是 | 无 |
value | string | 是 | 无 |
page | string | 是 | 无 |
size | string | 是 | 无 |
以上即相关内容。
以上是关于Java-Json的格式化和转参数表格的主要内容,如果未能解决你的问题,请参考以下文章
如何同时使用 QUERY 和 IMPORTRANGE 函数来提取和转置谷歌表格中的数据?