org.json使用的时候,想把jsonString转jsonObject;可以用new JsonObject(String)
但是如果用new JsonObject(StringBuilder),转换成的json为空。
测试代码如下:
public class Test {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
builder.append("{\n" +
"\"a\":1, \n" +
"\"b\":\"c\"\n" +
"}");
System.out.println("1. 打印StringBuilder:" + builder);
System.out.println("2. 打印StringBuilder.toString:" + builder.toString());
JSONObject builderJson = new JSONObject(builder);
System.out.println("3. 打印StringBuilder转json:"+ builderJson);
JSONObject builderStringJson = new JSONObject(builder.toString());
System.out.println("4. 打印StringBuilder转json:"+ builderStringJson);
}
}
-------------------------------------------------------
1. 打印StringBuilder:{
"a":1,
"b":"c"
}
2. 打印StringBuilder.toString:{
"a":1,
"b":"c"
}
3. 打印StringBuilder转json:{}
4. 打印StringBuilder转json:{"a":1,"b":"c"}
问题出现背景是,通过curl命令发送json语句,来实现创建ES的索引模板,结果一直报以下错误
后来才发现,是用new JsonObject(StringBuilder)忘了转换,导致curl发送的json是空的,所以一直报索引pattern找不到的错误;最后换成new JsonObject(StringBuilder.toString)就可以了。
原因在于:StringBuilder是一个对象,打印的时候其源码里有一个toString的方法,会自动调用;但是new JsonObject()方法是,将json字符串转成json对象;所以StringBuilder直接转json对象,就是空的了