我想知道如何从下面的JSON文件中提取2D数组。我正在使用Unity,理想情况下喜欢使用Newtonsoft.Json
{ "height":8,
"infinite":false,
"layers":[
{
"data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"height":8,
"name":"Tile Layer 1",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":8,
"x":0,
"y":0
}],
"nextobjectid":1,
"orientation":"orthogonal",
"renderorder":"right-down",
"tiledversion":"1.1.2",
"tileheight":64,
}
这不是一个重复的问题,因为它处理在JSON文件中有嵌套数组的独特情况,特别是我想使用Newtonsoft.JSON。
答案 0 :(得分:2)
如果你想使用Newtonsoft(以及几乎任何其他JSON库),你只需要创建一个类来保存反序列化的对象:
public class Layer
{
public IEnumerable<int> Data {get;set;}
public int Height {get;set;}
// ... implement other properties
}
public class MyObject
{
public int Height {get;set;}
public bool Infinite {get;set;}
public IEnumerable<Layer> Layers {get;set;}
// ... implement other properties
}
然后将字符串反序列化为您的对象:
using Newtonsoft.Json.JsonConvert;
....
var myObject = DeserializeObject<MyObject>(jsonString);
foreach (var layer in myObject.Layers)
{
// do something with each layer, e.g. get the sum of the data
var sum = layer.data.Sum();
}
答案 1 :(得分:0)
此链接可能对您有所帮助。 JSONObject
答案 2 :(得分:0)
如果Unity支持c#4附带的动态关键字,那么您可以直接使用
分配它dynamic obj = JsonConvert.DeserializeObject(jsonData);
然后,您将直接访问它:obj.layers.data
如果包含的单声道框架不支持动态关键字,你可以做的是创建一个数据模型,这是一个包含所有属性的简单类,并以类似的方式进行分配。
YourModel obj = JsonConvert.DeserializeObject<YourModel>(jsonData);
答案 3 :(得分:0)
你没有2D数组,你有一个包含数组的对象数组。没什么2D。
首先获取与json匹配的c#对象:
public class Layer
{
public List<int> data;
public int height;
public string name;
public int opacity;
public string type;
public bool visible;
public int width;
public int x;
public int y;
}
public class RootObject
{
public int height;
public bool infinite;
public List<Layer> layers;
public int nextobjectid;
public string orientation;
public string renderorder;
public string tiledversion;
public int tileheight;
}
使用转换器:
RootObject ro = JsonUtility.FromJson<RootObject>(json);