Java 如何创建json对象?
我有绳子Java 如何创建json对象?,java,Java,我有绳子 {"comp1.a":1,comp1.b":"2","comp1.c.aa":3,"comp1.c.bb":"4"} 字段的名称将始终与“.”一起,如果有另一个级别,则与另一个级别一起 我希望输入的结果是: {"comp1":{"a":1,"b":"2","c":{"aa":3,"bb":"4"}}} 没有字符串操作我怎么做?我不知道你所说的“字符串操作”是什么意思。您可以将输入的字符串解析为JsonObjects,但是您仍然需要拆分字段名,因此您也可以只解析原始的字符串 我是这
{"comp1.a":1,comp1.b":"2","comp1.c.aa":3,"comp1.c.bb":"4"}
字段的名称将始终与“.”一起,如果有另一个级别,则与另一个级别一起
我希望输入的结果是:
{"comp1":{"a":1,"b":"2","c":{"aa":3,"bb":"4"}}}
没有字符串操作我怎么做?我不知道你所说的“字符串操作”是什么意思。您可以将输入的
字符串
解析为JsonObject
s,但是您仍然需要拆分字段名,因此您也可以只解析原始的字符串
我是这样做的:
首先,我删除了{
和}
并基于,
进行拆分:
String[] tokens = "{\"comp1.a\":1,comp1.b\":\"2\",\"comp1.c.aa\":3,\"comp1.c.bb\":\"4\"}".replaceAll("\\{|\\}", "").split(",");
然后我编写了一个递归解析方法,该方法接受每个标记,并使用java.util.Map
构建一个图:
private void parse(Map graph, String token)
{
int index = token.indexOf(".");
if (index > -1)
{
String name = token.substring(0, index).replaceAll("\"", "");
String remainder = token.substring(index + 1, token.length());
Map children = (Map)graph.get(name);
if (children == null)
{
children = new HashMap();
graph.put(name, children);
}
parse(children, remainder);
}
else
{
String[] nameValuePair = token.split(":");
graph.put(nameValuePair[0].replaceAll("\"", ""), nameValuePair[1]);
}
}
如果此方法在标记中找到一个
,它将在图形中创建另一个级别并递归,如果没有,它只将值添加到图形中
接下来,我编写了一个方法,将此图转换回有效的JSON字符串:
private void toJson(StringBuilder jsonBuilder, Map graph)
{
jsonBuilder.append("{");
for (Object key : graph.keySet())
{
jsonBuilder.append("\"").append(key).append("\"");
Object value = graph.get(key);
if (value instanceof Map)
{
toJson(jsonBuilder.append(":"), (Map)value);
jsonBuilder.append("}");
}
else
{
jsonBuilder.append(":").append(value).append(",");
}
}
jsonBuilder.replace(jsonBuilder.length() - 1, jsonBuilder.length(), "}");
}
显然,您可以使用您选择的JavaJSONAPI来替代此代码中的StringBuilder
,解析方法已经完成了艰苦的工作
把所有这些放在一起:
String[] tokens = "{\"comp1.a\":1,comp1.b\":\"2\",\"comp1.c.aa\":3,\"comp1.c.bb\":\"4\"}".replaceAll("\\{|\\}", "").split(",");
Map graph = new HashMap();
for (String token : tokens)
{
parse(graph, token);
}
StringBuilder jsonBuilder = new StringBuilder();
toJson(jsonBuilder, graph);
System.out.println(jsonBuilder.toString());
我得到输出:
{"comp1":{"a":1,"b":"2","c":{"aa":3,"bb":"4"}}}
这将需要一些自定义解析-您尝试过什么吗?展示您在解析这个方面所做的尝试。您真的必须用Java解析它吗?在JavaScript中,它会简单得多。我在java中需要它,这不是家庭作业。我不知道是从字符串拆分开始,还是有一种通用的方法来完成它。有一些库,比如Gson,可以将json字符串转换为java对象,但我想它们可能有这个命名约定的问题,你可以试试看。你能给我举个例子吗?