首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地将java对象转换为Json (嵌套)

如何正确地将java对象转换为Json (嵌套)
EN

Stack Overflow用户
提问于 2016-02-12 16:48:32
回答 3查看 616关注 0票数 3

好的,我想得到的输出是:

代码语言:javascript
复制
  {
    "id": 460,
    "position": {
      "x": 3078,
      "y": 3251,
      "z": 0
    },
    "random-walk": true,
    "walk-radius": 1
  },

但我现在得到的是:

代码语言:javascript
复制
{
  "id": 460,
  "position": "{
    "x": 3078,
    "y": 3251,
    "z": 0
  }",
  "random-walk": true,
  "walk-radius": 0
},

问题是我试图转换为json的位置对象。我试过的密码:

代码语言:javascript
复制
Path path = Paths.get("./npcs.json");
File file = path.toFile();
file.getParentFile().setWritable(true);

if (!file.getParentFile().exists()) {
    try {
        file.getParentFile().mkdirs();
    } catch (SecurityException e) {
        System.out.println("Unable to create directory for donator data!");
    }
}

try (FileWriter writer = new FileWriter(file)) {

    Gson builder = new GsonBuilder().setPrettyPrinting().create();
    JsonObject object = new JsonObject();

    Position pos = new Position(mob.absX, mob.absY, mob.heightLevel);
    object.addProperty("id", mob.npcId);
    object.addProperty("position", builder.toJson(pos));
    object.addProperty("random-walk", mob.randomWalk);
    object.addProperty("walk-radius", mob.walkingType);

    writer.write(builder.toJson(object));
    writer.close();

} catch (Exception e) {
    System.out.println("Something went wrong with saving for mob !");
    e.printStackTrace();
}

有人知道如何获得第一个结果吗?所以没有双引号。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-12 17:14:37

使用这个

object.add("position", new Gson().toJsonTree(pos));

而不是

object.addProperty("position", builder.toJson(pos));

结果应该是这样的:

代码语言:javascript
复制
"position": {
    "x": 10,
    "y": 50
  },
票数 2
EN

Stack Overflow用户

发布于 2016-02-12 16:54:52

代码语言:javascript
复制
JSONObject json = new JSONObject();
JSONArray addresses = new JSONArray();
JSONObject address;
try
{
   int count = 15;

   for (int i=0 ; i<count ; i++)
   {
       address = new JSONObject();
       address.put("Name","Name no." + i);
       address.put("Country", "Country no." + i);
       addresses.put(address);
   }
   json.put("Addresses", addresses);
}
catch (JSONException jse)
{
    out.println("Error during json formatting" + jse.getMessage());
}

我建议在您的主JSON中使用JSONObject。在此之后,添加每个组件。对于向量,添加一个json数组。这里是一个简单的例子,我曾经更好地理解这一点。

票数 0
EN

Stack Overflow用户

发布于 2016-02-12 17:04:06

准确地说,您可以使用自己的java对象。Gson使用反射访问类中的字段,因此不必手动解析任何内容。

例如,在您的案例中:

代码语言:javascript
复制
    import com.google.gson.annotations.SerializedName;

    public class Walk {
        private int id;
        private Position position;

        @SerializedName("random-walk")
        private boolean randomWalk;

        @SerializedName("walk-radius")
        private int walkRadius;
    }
    public class Position {
        private int x,y,z;
    }

然后使用

代码语言:javascript
复制
 Gson gson = new Gson();
 Walk walk = gson.fromJson(yourJson, Walk.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35367974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档