JsonObject.addProperty("key", value)相关的value双引号问题

诺丽果 2018-05-29 11:41:50
我想要得到这样的一个json串
{ 
"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后面的值的双引号去掉,怎么办?试了好多办法也不行
...全文
2363 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 Cathy313 的回复:
你的

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);

}


你可以根据自己的情况进行更改。

按照你的思路解决了
非专业IT男 2018-05-29
  • 打赏
  • 举报
回复
引用 7 楼 weixin_39309867 的回复:
引用 6 楼 qq_35556460 的回复:
[quote=引用 4 楼 weixin_39309867 的回复:] [quote=引用 3 楼 qq_35556460 的回复:] value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧
刚看了下,JsonObject.addProperty中的value只能为4种:String,Number,Boolean和Character[/quote]恩,我用一楼的方法试了,可以用,虽然给你的分不多,还是想谢谢你的回答[/quote] 不存在的,找到办法就好。
诺丽果 2018-05-29
  • 打赏
  • 举报
回复
引用 6 楼 qq_35556460 的回复:
引用 4 楼 weixin_39309867 的回复:
[quote=引用 3 楼 qq_35556460 的回复:] value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧
刚看了下,JsonObject.addProperty中的value只能为4种:String,Number,Boolean和Character[/quote]恩,我用一楼的方法试了,可以用,虽然给你的分不多,还是想谢谢你的回答
非专业IT男 2018-05-29
  • 打赏
  • 举报
回复
引用 4 楼 weixin_39309867 的回复:
引用 3 楼 qq_35556460 的回复:
value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧
刚看了下,JsonObject.addProperty中的value只能为4种:String,Number,Boolean和Character
非专业IT男 2018-05-29
  • 打赏
  • 举报
回复
引用 4 楼 weixin_39309867 的回复:
引用 3 楼 qq_35556460 的回复:
value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧
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);
    }
用这个试试
诺丽果 2018-05-29
  • 打赏
  • 举报
回复
引用 3 楼 qq_35556460 的回复:
value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
这个我知道,但是JsonObject.addProperty这个方法,value放的必须是string类型的吧
非专业IT男 2018-05-29
  • 打赏
  • 举报
回复
value中放的对象是什么类型,最后结果就是什么类型。你放了个string自然就有双引号。放入“position”对应的值改为map对象就好了。
Cathy313 2018-05-29
  • 打赏
  • 举报
回复
我的运行结果:

{"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}}]}
Cathy313 2018-05-29
  • 打赏
  • 举报
回复
你的

 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);

	}
你可以根据自己的情况进行更改。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧