2016-07-22 14 views
0

So habe ich einige Json:Parse JSON ohne Plugins

{ 
    "name": "Shadow Realm", 
    "description": "A spooky Haloween inspired map", 
    "map": { 
     "version": 79, 
     "color_palette": [ 
     { 
      "r": 96, 
      "g": 209, 
      "b": 234, 
      "a": 255 
     }, 
     { 
      "r": 255, 
      "g": 55, 
      "b": 55, 
      "a": 255 
     }] 
    } 
} 

Und ich bin ich in der Lage, die ersten paar Werte zu lesen, aber ich nicht in der Lage bin, die Version zu lesen, und ich bin nicht sicher, was ich sein sollte lesen der Karteneintrag als, irgendwelche Ideen? Ich würde es vorziehen, kein Plugin zu verwenden, da ich das Projekt so klein wie möglich halten möchte, wenn es machbar ist.

using UnityEngine; 
using System.Collections; 
using System.Reflection; 
using System.Linq; 
using System; 

[System.Serializable] 
public class Tests : MonoBehaviour 
{ 
    private string jsonMapData; 

    void Start() 
    { 
     jsonMapData = Import_bnl_bin.LoadResourceTextfile("map.json"); 
     MyClass jsonMap = new MyClass(); 
     jsonMap = JsonUtility.FromJson<MyClass>(jsonMapData); 

     Debug.Log("Name " + jsonMap.name + " : Desc " + jsonMap.description + " : Version " + jsonMap.version); 
    } 

    public class MyClass 
    { 
     public string name; 
     public string description; 

     public int version; 
    } 
} 
+0

Wenn Sie sich Sorgen über die Projektgröße machen, kann ich [SimpleJSON] (http://wiki.unity3d.com/index.php/SimpleJSON) oder [MiniJSON] (https://gist.github.com/darktable) vorschlagen/1411710) – Bill

Antwort

1

es scheint, dass die Klassen serializable

[Serializable] 
public class Map 
{ 
    public int version; 
    public List<ColorPalette> color_palette; 
} 
sein müssen

sonst die Daten nicht lesen kann, auch beenden ich die

{ get; set; } 
Entfernung bis

, wie es die

.FromJson() 
wurde zwingende

Funktion und bewirkt, dass es Null zurückgibt

1

Verwenden http://json2csharp.com I erzeugt die folgenden Klassen Ihrer Probe JSON-Dokument verwenden.

public class ColorPalette 
{ 
    public int r { get; set; } 
    public int g { get; set; } 
    public int b { get; set; } 
    public int a { get; set; } 
} 

public class Map 
{ 
    public int version { get; set; } 
    public List<ColorPalette> color_palette { get; set; } 
} 

public class RootObject 
{ 
    public string name { get; set; } 
    public string description { get; set; } 
    public Map map { get; set; } 
} 

Ich bin nicht vertraut mit JsonUtility aber meine Vermutung wäre, dass Sie diese Zeile ersetzen würde:

jsonMap = JsonUtility.FromJson<MyClass>(jsonMapData); 

mit diesem:

jsonMap = JsonUtility.FromJson<RootObject>(jsonMapData); 

Oder könnten Sie RootObject-MyClass umbenennen .

+0

ok also eine Klasse innerhalb einer Klasse, die Sinn macht, aber 'Debug.log()' kann aus irgendeinem Grund nicht auf diesen 'public string name {get; einstellen; } ' die gleiche Art und Weise wäre es dieser ' public string name; ' Entweder ich es falsch oder Speicher von Daten nicht korrekt – Alpha

+0

auch am Zugriff auf' debug.log (jsonMap.map.version) 'wirft eine NULL-Verweis Ausnahme . – Alpha

+0

Wie ich schon sagte, nicht vertraut mit 'JsonUtility' also vielleicht gibt es einen Fehler darin, der nicht mit Klassen innerhalb von Klassen umgehen kann. Dies analysiert perfekt mit JSON.NET, so dass es gültig ist JSON (unter der Annahme, dass Sie genau das gepostet haben, was Sie verwenden). Ich gehe davon aus, dass 'JsonUtility' Teil von Unity3d ist, aber ich habe keine Lust, das ganze herunterzuladen und zu installieren, um es selbst auszuprobieren. –