在操作java的时候,大家不知道java实现json格式化怎么操作?那么接下来,我们就来给大家讲解一下这方面的内容。
可以使用谷歌的Gson:
1、项目的pom.xml依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency>
2、Java示例代码
(1) 导入的包:
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser;
(2) 测试代码:
JSON字符串与上述测试代码相同.
public static void main(String[] args)
{
String jsonString = "{"
_index ":"
book_shop ","
_type ":"
it_book ","
_id ":"
1 ","
_score ":1.0," +
""
_source ":{"
name ": "
Java编程思想(第4版)
","
author ": " [美] Bruce Eckel ","
category ": "
编程语言 "," +
""
price ": 109.0,"
publisher ": "
机械工业出版社 ","
date ": "
2007 - 06 - 01 ","
tags ": [ "
Java ", "
编程语言 " ]}}";
String pretty = toPrettyFormat(jsonString)
System.out.println(pretty);
}
/**
* 格式化输出JSON字符串
* @return 格式化后的JSON字符串
*/
private static String toPrettyFormat(String json)
{
JsonParser jsonParser = new JsonParser();
JsonObject jsonObject = jsonParser.parse(json)
.getAsJsonObject();
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
return gson.toJson(jsonObject);
}(3) 格式化输出后的结果:
说明: Gson使用2个空格作为换行后的格式转换.
{
"_index": "book_shop"
, "_type": "it_book"
, "_id": "1"
, "_score": 1.0
, "_source":
{
"name": "Java编程思想(第4版)"
, "author": "[美] Bruce Eckel"
, "category": "编程语言"
, "price": 109.0
, "publisher": "机械工业出版社"
, "date": "2007-06-01"
, "tags": [
"Java",
"编程语言"
]
}
}格式化如何输出到控制台?
代码如下:
/**
* 输出json
*
* @param jsonObject json格式响应实体
*/
public static JSONObject output(JSONObject jsonObject)
{
if (MapUtils.isEmpty(jsonObject))
{
output("json 对象是空的!");
return jsonObject;
}
String start = SourceCode.getManyString(SPACE_1, 4);
String jsonStr = jsonObject.toString(); // 先将json对象转化为string对象
jsonStr = jsonStr.replaceAll("\\\\/", OR);
int level = 0; // 用户标记层级
StringBuffer jsonResultStr = new StringBuffer("> "); // 新建stringbuffer对象,用户接收转化好的string字符串
for (int i = 0; i < jsonStr.length(); i++)
{ // 循环遍历每一个字符
char piece = jsonStr.charAt(i); // 获取当前字符
// 如果上一个字符是断行,则在本行开始按照level数值添加标记符,排除第一行
if (i != 0 && '\n' == jsonResultStr.charAt(jsonResultStr.length() - 1))
{
for (int k = 0; k < level; k++)
{
jsonResultStr.append(start);
}
}
switch (piece)
{
case ',':
// 如果是“,”,则断行
char last = jsonStr.charAt(i - 1);
if ("\"0123456789le]}".contains(last + EMPTY))
{
jsonResultStr.append(piece + LINE);
}
else
{
jsonResultStr.append(piece);
}
break;
case '{':
case '[':
// 如果字符是{或者[,则断行,level加1
jsonResultStr.append(piece + LINE);
level++;
break;
case '}':
case ']':
// 如果是}或者],则断行,level减1
jsonResultStr.append(LINE);
level--;
for (int k = 0; k < level; k++)
{
jsonResultStr.append(start);
}
jsonResultStr.append(piece);
break;
default:
jsonResultStr.append(piece);
break;
}
}
output(LINE + "↘ ↘ ↘ ↘ ↘ ↘ ↘ ↘ json ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙" + LINE + jsonResultStr.toString()
.replaceAll(LINE, LINE + "> ") + LINE + "↘ ↘ ↘ ↘ ↘ ↘ ↘ ↘ json ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙ ↙");
return jsonObject;
}更新了输出显示效果:

备注:在json数据中存在“,”这种情况以及value非string(数字和null或者科学技术法时)可能会存在一些显示异常,以及value值本身是一个json数据的字符串时候也会把value当做json来处理。
好了,今天的分享到这里就结束了,大家要是不会json格式化处理的haul,参考以上方法就好了。最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: