【问题标题】:Introducing variables to Gson将变量引入 Gson
【发布时间】:2012-03-27 18:24:33
【问题描述】:

我有一个包含大量类似代码的大型 JSON 文件。类似这样:

...,"techs":{"t1":{"level":24,"able":true},"t2":{"level":23,"able":true},"t3":{"level":20,"able":true},"t4"...,"t5"...

它从 t1t510...因此,我必须为每个 tN 创建一个活动,所以我有打造510活动! 0.0

要访问每个 tN,我使用以下行:

       Gson gson = new Gson();
        Planets json = gson.fromJson(str, Planets.class);

        System.out.println(json.techs.t1.level);
        System.out.println(json.techs.t2.level);
                         etc...

所以我想知道是否有可能为变量更改 t1,这样我只需更改变量即可在单个活动中访问 t2

例如:String tech = t456; System.out.println(json.techs.tech.level);

非常感谢您!

【问题讨论】:

    标签: android json variables deserialization gson


    【解决方案1】:

    这完全取决于你的想象力;-)

    我会从这个 JSON sn-p 出来

    "techs":{"t1":{"level":24,"able":true},"t2":{"level":23,"able":true},"t3":{"level":20,"able":true}}
    

    这很容易表示为这种结构

    HashMap<String, InnerObject>
    

    InnerObject 类的定义如下:

    class InnerObject {
        int level;
        boolean able;
    }
    

    所以你需要的一切都是类,其中单个字段将被称为techs,它的定义如下:

    class JSONWrapper {
        // another variables
        HashMap<String, InnerObject> techs;
    }
    

    要访问之后的字段,您可以使用:

    String techId = "t546";
    InnerObject = JSONWrapperInstance.techs.get(techId);
    

    完整代码:

    String str = "... contains JSON string ...";
    JSONWrapper JSONWrapperInstance = new Gson().fromJson(str, JSONWrapper.class);
    

    您可以像这样浏览HashMap 中的所有项目:

    Iterator<String> iterator = JSONWrapperInstance.techs.keySet().iterator();
    while(iterator.hasNext()){
        InnerObject = JSONWrapperInstance.techs.get(iterator.next());
    }
    

    【讨论】:

    • 哇!感谢您的出色回复!明天早上我会试试这个!似乎它可以毫无问题地工作。明天我将对你的回复进行投票。谢谢!
    • 我正在尝试访问数据,但日志显示:pac.ka.ge.Overview$InnerObject@b5e92010 至少它不会抛出错误!编辑:修复它!我只需要将 InnerObject 的类型更改为 int!非常感谢你!它就像一个魅力! :D
    • 我遇到了问题...我总是收到 NullPointerException! Galax galax = new Gson().fromJson(strGalaxy, Galax.class);双 er = galax.pos.get("p2").debris.titanium; strGalaxy 还可以,课程也可以,我认为一切都正确... public class Galax { public HashMap pos; }public class InnerObject { public Debris 碎片; } public class Debris { public 双钛; } JSON sn-p:{“p1”:{“碎片”:{“钛”:0,“硅”:0}},“p2”:{“碎片”:{“钛”:0,“硅” :0}}
    • @KrLx_roller 开始新问题,现在当您知道如何使用 Gson 进行(反)序列化时,问题可以放在其他地方。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2015-12-02
    • 2014-05-18
    相关资源
    最近更新 更多