81,122
社区成员




{
"version": "1.0.0",
"encoding": 'utf-8'
"poi_info":
[
{
"name": "",
"position": {
"x": 0,
"y": 0,
"yaw": 0},
},
{
"name": "",
"tags": [],
"position": {
"x": 0,
"y": 0,
"yaw": 0},
}
}
JsonObject object = new JsonObject(); // 创建Json格式的数据
object.addProperty("version", "1.0.0");
object.addProperty("encoding", "utf-8");
JsonArray array = new JsonArray();
for (int i = 0; i < coordinateList.size(); i++) {
JsonObject subJsonObj1 = new JsonObject();
subJsonObj1.addProperty("name", 1);
Gson gson = new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
String str = gson.toJson(coordinateList.get(i));
System.out.println("coordinateList.get(i)"+coordinateList.get(i));
subJsonObj1.addProperty("position", str);
array.add(subJsonObj1);
}
object.add("poi_info", array);
,这样出来的效果是{
"version":"1.0.0",
"encoding":"utf-8",
"poi_info":
[
{
"name":1,
"position":"{
\"x\":0.4,\"y\":-3.1,\"yaw\":-2.34}"
},
{
"name":1,
"position":"{
\"x\":1.4,\"y\":-2.1,\"yaw\":-2.34}"
}
}
,position后面的value因为是string类型的自动加上了双引号,导致里面的x显示出来是转义字符\",现在我就想把position后面的值的双引号去掉,怎么办?试了好多办法也不行这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧 [quote=引用 3 楼 qq_35556460 的回复:] value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧 value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧 value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
public void test(List coordinateList){
Map<String,Object> object = new HashMap<String,Object>();
object.put("version", "1.0.0");
object.put("encoding", "utf-8");
List<Object> array = new ArrayList<Object>();
for (int i = 0; i < coordinateList.size(); i++) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", 1);
map.put("position", coordinateList.get(i));
array.add(map);
}
object.put("poi_info", array);
String result = JSON.toJSONString(object);
System.out.println(result);
}
用这个试试value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
{"version":"1.0.0","encoding":"utf-8","poi_info":[{"name":"","position":{"x":0,"y":0,"yaw":0}},{"name":"","position":{"x":0,"y":0,"yaw":0}}]}
Gson gson = new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
String str = gson.toJson(coordinateList.get(i));
System.out.println("coordinateList.get(i)"+coordinateList.get(i));
subJsonObj1.addProperty("position", str);
将其转化成String了,再转化json就有双引号。想你这种复合类型的想转化成json,可以将所有转化成一条json的值创建成对象,再利用gson直接转化成json即可:
给你个例子:
private String version="";
private String encoding="";
private List<Map<String, Object>> poi_info;
@Test
public void test03() {
version="1.0.0";
encoding="utf-8";
poi_info = new ArrayList<Map<String, Object>>();
for (int i = 0; i < 2; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "");
Map<String, Object> sonMap = new HashMap<String, Object>();
sonMap.put("x", 0);
sonMap.put("y", 0);
sonMap.put("yaw", 0);
map.put("position", sonMap);
poi_info.add(map);
}
Gson gson = new GsonBuilder().serializeNulls()
.setDateFormat("yyyy-MM-dd HH:mm:ss").create();
String str = gson.toJson(this);//this是对象,在我这里是本类,你可以修改成自己创建的对象
System.out.println(str);
}
你可以根据自己的情况进行更改。