使用 libGDX 写入 Json

2022-01-12 00:00:00 json android java libgdx

我是 Json 和 libGDX 的新手,但我创建了一个简单的游戏,我想将玩家姓名和他们的分数存储在 Json 文件中.有没有办法做到这一点?我想在 Gdx.files.localStorage 中创建一个 Json 文件,如果它不存在,如果存在,则将新数据附加到它.

I am new to Json and libGDX but I have created a simple game and I want to store player names and their scores in a Json file. Is there a way to do this? I want to create a Json file in Gdx.files.localStorage if it doesnt exist and if it does, append new data to it.

我已经检查了以下给出的代码:

I have checked code given at :

1>使用Json.Serializable解析Json文件

2>解析JsonlibGDX

但我找不到如何实际创建 Json 文件并向其写入多个唯一对象值(每个玩家的姓名和得分).我是否遗漏了他们的代码中的某些内容?

But I failed to locate how to actually create a Json file and write multiple unique object values (name and score of each player) to it. Did I miss something from their codes?

这个 链接 提到了如何加载现有的 json,但仅此而已.

This link mentions how to load an existing json but nothing else.

推荐答案

首先我不得不说我从来没有使用过Libgdx Json API 我自己.但我会尽力帮助你.我认为 github 上的 Tutorial 应该对您有所帮助.
基本上,Json API 允许您将整个对象写入 Json 对象,然后将其解析为 String.为此,请使用:

First of all i have to say that i never used the Libgdx Json API myself. But i try to help you out a bit. I think this Tutorial on github should help you out a bit.
Basicly the Json API allows you to write a whole object to a Json object and then parse that to a String. To do that use:

PlayerScore score = new PlayerScore("Player1", 1537443);      // The Highscore of the Player1 
Json json = new Json();
String score = json.toJson(score);

这应该是这样的:

{name: Player1, score: 1537443}

您可以使用 prettyPrint() 代替 toJson(),它包括换行符和制表符.

Instead of toJson() you can use prettyPrint(), which includes linebreaks and tabs.

要将其写入文件,请使用:

To write this to a File use:

FileHandle file = Gdx.files.local("scores.json");
file.writeString(score, true);         // True means append, false means overwrite.

您还可以通过实现 Json.Serializable 或使用 writeValue 手动添加值来自定义您的 Json.

You can also customize your Json by implementing Json.Serializable or by adding the values by hand, using writeValue.

阅读类似:

FileHandle file = Gdx.files.local("scores.json");
String scores = file.readString();
Json json = new Json();
PlayerScore score = json.fromJson(PlayerScore.class, scores);

如果您一直通过实现 Json.Serializable 来使用自定义版本,则您已经实现了 read (Json json, JsonValue jsonMap) 方法.如果你正确地实现了它,你的反序列化应该可以工作.如果您一直在手动添加值,则需要创建一个 JsonValuejsonFile = new JsonValue(scores).scoresFileString.现在您可以循环遍历此 JsonValue 的子项或按名称获取其子项.

If you have been using a customized version by implementing Json.Serializable you have implemented the read (Json json, JsonValue jsonMap) method. If you implemented it correctly you the deserialization should work. If you have been adding the values by hand you need to create a JsonValuejsonFile = new JsonValue(scores). scores is the String of the File. Now you can cycle throught the childs of this JsonValue or get its childs by name.

最后一件事:对于高分或类似的事情可能是 Libgdx Preferences 是更好的选择.这里您可以阅读如何使用它们.

One last thing: For highscores or things like that maybe the Libgdx Preferences are the better choice. Here you can read how to use them.

希望我能帮上忙.

相关文章