2016-02-11 3 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. Кто-нибудь знает, как назначить актив AssetReference с relativePath из TextureRegionAsset?Как разобрать этот JSON с LibGDX

Я знаю, что я мог бы исключить обработку «класса» и простой анализ 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 numbers
  • Название строки
  • ИНТ возраст

Строка текст является результатом json.toJson(person). Ваша результирующая сериализованная строка выглядит в том же формате, что позволяет предположить, что вы уже используете сериализатор Json, но не unserializer.

+0

SE стремится иметь поддерживаемые ответы, поэтому, просто разместив ссылку, вы не следуете этому принципу, поскольку эта ссылка может умереть. Вы можете использовать ссылки, чтобы усилить ваш ответ, но ответ должен стоять на своем. Вы также можете процитировать ссылку и дать кредит автору, но просто скопировать вставку также не рекомендуется. – Madmenyo

+0

Вздох. Поскольку это официальная вики, я предполагаю, что она никогда не опустится. Цитирование страницы - большая боль, но я немного отредактирую свой ответ. – EinsteinK

+0

Тем не менее, предыдущий google также переносился. Вам не нужно процитировать, вы тоже можете написать сами;) – Madmenyo

Смежные вопросы