unity3d SimpleJSON如何获取JSON数组中的“位置”项值

jckbn6z7  于 2023-01-26  发布在  其他
关注(0)|答案(2)|浏览(190)
"results" : [
      {
         "geometry" : {
            "location" : {
               "lat" : 50.4501,
               "lng" : 30.5234
            },
            "viewport" : {
               "northeast" : {
                  "lat" : 50.59079800991073,
                  "lng" : 30.82594104187906
               },
               "southwest" : {
                  "lat" : 50.21327301525928,
                  "lng" : 30.23944009690609
               }
            }
         },

几何中有lat和lng值,但我现在只能进入“结果”。

JSONNode root = JSONNode.Parse(www.downloadHandler.text);  
JSONArray nodes = root["results"].AsArray;
xdyibdwo

xdyibdwo1#

使用JsonElement可能会更好,因为它更快。我已经针对您的json测试了此代码,它工作正常。

public static double UsingJsonElement(string jsonString)
{
    var jsonElement = JsonSerializer.Deserialize<JsonElement>(jsonString);
    
    return jsonElement
        .GetProperty("geometry")
        .GetProperty("location").GetProperty("lat")
        .GetDouble();
    
    var viewportlat = jsonElement
        .GetProperty("geometry")
        .GetProperty("viewport").GetProperty("northeas").GetProperty("lat")
        .GetDouble();
}
4bbkushb

4bbkushb2#

根据JSON层次结构,我猜这将取决于您感兴趣的是哪一组lat/long-有三种。
然后你可以简单地沿着层次结构往下走,比如。

var firstNode = nodes[0];
var geometry = firstNode["geometry"];
var location = geometry["location"];
var lat = location["lat"].AsFloat;
var lng = location["lng"].AsFloat;

不过,您可能希望使用Newtonsoft JSON.Net,并简单地实现相应的目标类型

[Serializable]
public class Node
{
    // again depending which values you are interested in
    // you only have to implement th hierarchy of values you care for 
    // the rest will be ignored
    public Geometry geometry;
}

[Serializable]
public class Geometry
{
    public Location location;
}

[Serializable]
public class Location
{
    public float lat;
    public float lng;
}

然后简单地

var nodes = JsonConvert.DeserializeObject<Node[]>(jsonString);

和访问

var lat = nodes[0].geometry.location.lat;
var lng = nodes[0].geometry.location.lng;

相关问题