2016-02-11 56 views
2
"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?如何用LibGDX解析这个JSON

我知道我可以去除“类”处理和简单的解析JSON,但我需要能够处理这与LibGDX。

理想情况下,我正在寻找解析数据并从JSON创建一个精灵。

谢谢。

回答

5

您可以使用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"); 
} 
+0

我喜欢这个解决方案。有趣的是,它解决了我遇到的其他一些问题。好奇心仍然促使我找到一个100%的LibGDX解决方案,但那只是我下属:) – farlord

+0

我的错误,我只注意到JsonReader和JsonValue都是LibGDX的一部分。再次感谢。 – farlord

1

其实是有一个有用的libgdx维基页面此:

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 
} 

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

  • ArrayList号码
  • 字符串名称
  • INT年龄

弦乐文本json.toJson(person)结果。您的结果序列化字符串看起来是相同的格式,这使我假设您已经使用Json序列化器,但不是非序列化器。

+0

SE的目标是有可维护的答案,所以只要发布一个链接,你就不会遵循这个原则,因为链接可能会死亡。你可以使用链接来加强你的答案,但答案应该独立。你也可以引用这个链接并给予作者功劳,但是简单地复制粘贴也是不鼓励的。 – Madmenyo

+0

感叹。由于它是官方wiki,我认为它永远不会下降。引用页面是一个很大的痛苦,但我会编辑我的答案了一下。 – EinsteinK

+0

然而之前的谷歌也迁移过。你不必引用,也可以自己写; – Madmenyo