2016-07-22 76 views
0

让我有些JSON:解析JSON无需插件

{ 
    "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 
     }] 
    } 
} 

,我很能然而读前几个值我不能够阅读的版本,我不知道我应该读什么地图条目,任何想法? 我希望不必使用插件,因为如果可以的话,我希望项目尽可能小。

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

如果你担心项目的规模,可能我建议[SimpleJSON(http://wiki.unity3d.com/index.php/SimpleJSON)或[MiniJSON(https://gist.github.com/darktable/1411710) – Bill

回答

1

似乎类需要被序列化

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

否则无法读取数据,还我结束了去除

{ get; set; } 

,因为它是压倒一切的

.FromJson() 

funtion并使其返回null

1

使用http://json2csharp.com我生成使用您的样品JSON文档以下类。

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; } 
} 

我不熟悉JsonUtility但我的猜测是,你将取代这一行:

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

有了这个:

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

或者你可以重命名RootObjectMyClass

+0

确定这样一类是有道理内的一类,但是由于某些原因'的debug.log()'无法访问此 '公共字符串名称{;组; }' 就像这样 '公共字符串名称;' 要么我访问它错误或数据没有正确存储 – Alpha

+0

另外'Debug.log(jsonMap.map.version)'抛出一个空引用异常。 – Alpha

+0

就像我说的,不熟悉'JsonUtility',所以也许有一个错误,它不能处理类中的类。这使用JSON.NET完美解析,所以它是有效的JSON(假设你发布的是你正在使用的)。我假设'JsonUtility'是Unity3d的一部分,但不想下载和安装整个事情自己尝试一下。 –