从JSON结构中获取特定值

yvt65v4c  于 11个月前  发布在  其他
关注(0)|答案(4)|浏览(151)

我有一个json:

{
    "test": 
        {
            "id": 107537,
            "name": "test",
            "profileIconId": 785,
            "revisionDate": 1439997758000,
            "summonerLevel": 30
        }
}

字符串
我想得到名为summonerLevel的字段。
我试过将这个json转换成字符串,然后搜索summonerLevel,但我知道这个解决方案是不好的。
我用的是Json.NET。

xam8gpfp

xam8gpfp1#

您可以使用dynamic关键字

dynamic obj = JsonConvert.DeserializeObject(json);
Console.WriteLine(obj.unashamedohio.summonerLevel);

字符串

brgchamk

brgchamk2#

你有几种可能性(已经在其他答案中显示)。另一种可能性是使用Json.Net提供的JObjectJProperty属性,以便直接获取值,如下所示:

var jsonObject = (JObject)JsonConvert.DeserializeObject(json);
var unashamedohio = (JObject)(jsonObject.Property("unashamedohio").Value);
var summonerLevel = unashamedohio.Property("summonerLevel");
Console.WriteLine(summonerLevel.Value);

字符串
另一种可能性是创建JSON结构的类型化模型:

public class AnonymousClass
{
    public UnashamedOhio unashamedohio { get; set; }    
}

public class UnashamedOhio
{
    public int summonerLevel { get; set; }
}


并使用它来检索值:

var ao = JsonConvert.DeserializeObject<AnonymousClass>(json);
Console.WriteLine(ao.unashamedohio.summonerLevel);


这两种解决方案都打印相同的值:30
在我看来,如果你从JSON结构中获取了大量的值,你应该尽可能地使用总是类型化的模型。它在IDE中提供了错误检查(而不是动态的),这在运行时是有好处的。

pcww981p

pcww981p3#

我假设这个JSON存储在一个字符串中,我们称之为JSON......所以尝试

string json = "...";
JObject obj = JsonConvert.DeserializeObject<JObject>(json);
JObject innerObj = obj["test"] as JObject;
int lolSummorLvl = (int) innerObj["summonerLevel"];

字符串

jckbn6z7

jckbn6z74#

这对我很有效

在此找到-How do you read a simple value out of some json using System.Text.Json?

var jsonResult = JsonSerializer.Deserialize<JsonElement>(apiResponse).GetProperty("collection");
                        return jsonResult.EnumerateArray();

字符串

HTTPCLient GET代码:

using (var httpClient = new HttpClient())
            {
                // Headers
                httpClient.DefaultRequestHeaders.Add("X-AppSecretToken", "sJkvd4hgr45hhkidf");
                httpClient.DefaultRequestHeaders.Add("X-AgreementGrantToken", "r55yhhsJkved4ygrg5hssdhkidf");

                using (var response = await httpClient.GetAsync("https://restapi/customers"))
                {
                    string apiResponse = await response.Content.ReadAsStringAsync(); // Result

                    var jsonResult = JsonSerializer.Deserialize<JsonElement>(apiResponse).GetProperty("collection");
                    return jsonResult.EnumerateArray();
                 
                }
            }

相关问题