【问题标题】:Minecraft Statistics Json - Java or PythonMinecraft 统计 Json - Java 或 Python
【发布时间】:2021-02-18 21:45:19
【问题描述】:

我试图弄清楚如何读取位于 .minecraft/saves//stats/.json

中的统计信息 .json

Python 版本

    import json
    
    json_file = open("C:/Users/<name>/AppData/Roaming/.minecraft/saves/<worldname>/stats/<UUID>.json")
    variables = json.load(json_file)
    json_file.close()
    
    print(variables["stats"])

Java 版本:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Iterator;

public class Main {

    public static void main(String[] args) {

        JSONParser parser = new JSONParser();

        try (Reader reader = new FileReader("C:/Users/<name>/AppData/Roaming/.minecraft/saves/<worldname>/stats/<UUID>.json")) {

            JSONObject jsonObject = (JSONObject) parser.parse(reader);
            System.out.println(jsonObject);

            String stats = (String) jsonObject.get("stats");
            System.out.println(stats);

            //long age = (Long) jsonObject.get("age");
            //System.out.println(age);

            // loop array
            //JSONArray msg = (JSONArray) jsonObject.get("messages");
            //Iterator<String> iterator = msg.iterator();
            //while (iterator.hasNext()) {
            //    System.out.println(iterator.next());
            //}

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

以下是 .json 文件在文件中的大致样子:

    {'stats': {'minecraft:mined': {'minecraft:lily_of_the_valley': 1, 'minecraft:birch_leaves': 2, 'minecraft:crafting_table': 2, 'minecraft:grass': 1, 'minecraft:grass_block': 4, 'minecraft:oak_log': 10, 'minecraft:dirt': 6, 'minecraft:stone': 6, 'minecraft:oak_leaves': 3}, 'minecraft:killed': {'minecraft:pig': 4}, 'minecraft:picked_up': {'minecraft:stick': 2, 'minecraft:crafting_table': 3, 'minecraft:wooden_pickaxe': 1, 'minecraft:porkchop': 16, 'minecraft:oak_log': 10, 'minecraft:lily_of_the_valley': 1, 'minecraft:dirt': 19, 'minecraft:stone_axe': 1, 'minecraft:stone_pickaxe': 1, 'minecraft:oak_sapling': 2, 'minecraft:birch_sapling': 1, 'minecraft:oak_planks': 16, 'minecraft:cobblestone': 6}, 'minecraft:custom': {'minecraft:time_since_rest': 2832, 'minecraft:sprint_one_cm': 26594, 'minecraft:damage_taken': 360, 'minecraft:walk_one_cm': 10606, 'minecraft:mob_kills': 4, 'minecraft:drop': 1, 'minecraft:damage_dealt': 390, 'minecraft:swim_one_cm': 6359, 'minecraft:interact_with_crafting_table': 2, 'minecraft:fly_one_cm': 37248, 'minecraft:crouch_one_cm': 459, 'minecraft:play_one_minute': 6532, 'minecraft:deaths': 1, 'minecraft:sneak_time': 460, 'minecraft:walk_under_water_one_cm': 38, 'minecraft:jump': 293, 'minecraft:leave_game': 1, 'minecraft:walk_on_water_one_cm': 521, 'minecraft:time_since_death': 2811, 'minecraft:fall_one_cm': 9542}, 'minecraft:dropped': {'minecraft:birch_sapling': 1}, 'minecraft:crafted': {'minecraft:wooden_sword': 1, 'minecraft:oak_planks': 40, 'minecraft:crafting_table': 1, 'minecraft:stick': 8, 'minecraft:wooden_pickaxe': 1, 'minecraft:stone_pickaxe': 1, 'minecraft:stone_axe': 1}, 'minecraft:used': {'minecraft:oak_planks': 27, 'minecraft:wooden_pickaxe': 6, 'minecraft:stone_axe': 7, 'minecraft:wooden_sword': 13, 'minecraft:lily_of_the_valley': 1, 'minecraft:crafting_table': 2, 'minecraft:porkchop': 4}}, 'DataVersion': 2586}

所以我想知道如何在 Java 或 Python 中访问每个部分中的每个变量,这将引导我走上制作我的统计阅读器的路径。我正在为我的软件、设计和开发课程制作一个统计阅读器程序,但我不知道如何进一步访问 .json 文件,而不仅仅是“stats”元素中的内容。所以总的来说,我希望程序能够将每个变量分类到它们的子标题(“minecraft:mined”)中,然后能够通过稍后的搜索在该子标题中获取变量,但我稍后会谈到,我只需要弄清楚如何读取和使用 .json 文件。感谢人们给我的任何帮助,即使这暗示了我自己研究如何做到这一点的正确方向,因为我不知道从哪里开始。

无论如何,谢谢你们的帮助!

【问题讨论】:

  • 在python中你可以这样做:variables["stats"]["minecraft:mined"]["minecraft:lily_of_the_valley"],输出应该是1

标签: java python json minecraft


【解决方案1】:

即使它已解决,我认为在 Java 中也能看到它对您有好处。看看这个例子Java-Json

为简单起见,我将数据更改为 {'stats': {'minecraft:mined': {'minecraft:lily_of_the_valley': 1}}}

方法是这样的:

  public static void main(String[] args) throws ParseException{

    String s = "{\"stats\": {\"minecraft:mined\": {\"minecraft:lily_of_the_valley\": 1}}}";

    JSONParser parser = new JSONParser();
    Object obj = parser.parse(s);

    JSONObject base = (JSONObject) obj;
    JSONObject stats = (JSONObject) base.get("stats");
    JSONObject minecraft_mined = (JSONObject) stats.get("minecraft:mined");
    long minecraft_lily_of_the_valley = (long) minecraft_mined.get("minecraft:lily_of_the_valley");
    System.out.println(base);
    System.out.println(stats);
    System.out.println(minecraft_mined);
    System.out.println(minecraft_lily_of_the_valley);


  }

【讨论】:

    【解决方案2】:

    json.load() 将 json 转换为 python 字典和列表,因此您可以像使用常规 python 数据结构一样使用该数据。 (如果您需要更新这些内容,请考虑搜索 python listpython dict。)

    所以基本上,在你的例子中,你可以做的开始是:

    stats = variables['stats']
    # see what that gets you
    print(stats)
    
    mined = stats['minecraft:mined']
    # once more, see what that is
    print(mined)
    
    # and so forth:
    print(f"stone: {mined['minecraft:stone']}")
    

    从那里你应该能够自己继续。 :)

    【讨论】:

    • 非常感谢,这对我很有帮助!我不敢相信事情就这么简单,非常感谢,这真的帮助我完成了我的任务!
    猜你喜欢
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多