如何使用LibGDX解析此JSON

时间:2016-02-11 15:42:51

标签: json libgdx

 "components":[  
        {  
           "class":"AssetReference",
           "asset":{  
              "class":"TextureRegionAsset",
              "relativePath":"gfx/opengraph.png"
           }
        },
        {  
           "class":"Layer"
        },
        {  
           "class":"ProtoVisSprite",
           "width":5,
           "height":5
        },
        {  
           "class":"Transform",
           "x":0.13817275,
           "y":2.8430145,
           "scaleX":0.2,
           "scaleY":0.2
        },
        {  
           "class":"Origin"
        },
        {  
           "class":"Tint"
        },
        {  
           "class":"Renderable",
           "zIndex":2
        },
        {  
           "class":"VisID",
           "id":"scratch"
        }
     ]

我在使用LibGDX解析嵌套资产时遇到了一些问题。有谁知道如何使用TextureRegionAsset中的relativePath将资产分配给AssetReference?

我知道我可以删除"班级"处理和简单解析JSON,但我需要能够使用LibGDX来处理它。

理想情况下,我希望解析数据并从JSON创建一个精灵。

感谢。

2 个答案:

答案 0 :(得分:7)

您可以使用JsonReader并获取JsonValue

JsonReader json = new JsonReader();
JsonValue base = json.parse(Gdx.files.internal("file.json"));

//print json to console
System.out.println(base);

//get the component values
JsonValue component = base.get("components");

//print class value to console
System.out.println(component.getString("class"));

//array objects in json if you would have more components
for (JsonValue component : base.get("components"))
{
    System.out.println(component.getString("class"));
    System.out.println(component.get("asset").getString("class");
    System.out.println(component.get("asset").getString("relativePath");
}

答案 1 :(得分:1)

实际上有一个有用的libgdx wiki页面:

https://github.com/libgdx/libgdx/wiki/Reading-and-writing-JSON

显然,它本身已经可以使用嵌套类了。 维基页面有这个例子:

Json json = new Json();
Person person = json.fromJson(Person.class, text);

将以下内容用作文本

{
    class: com.example.Person,
    numbers: [
        {
            class: com.example.PhoneNumber,
            number: "206-555-1234",
            name: Home
        },
        {
            class: com.example.PhoneNumber,
            number: "425-555-4321",
            name: Work
        }
    ],
    name: Nate,
    age: 31
}

这是使用具有以下属性的示例类“Person”:

  • ArrayList数字
  • 字符串名称
  • int age

字符串文字json.toJson(person)的结果。您生成的序列化字符串看起来格式相同,这使我假设您已经在使用Json序列化程序,而不是反序列化程序。