根据给定的值选择json令牌

3
以下是我从服务器接收到的 json 部分:
[
{
    "outcome_id": "4",
    "items": [
        {
            "outcome_item_id": "4",
            "outcome_sport_id": "311"
        }
    ]
},
{
    "outcome_id": "4",
    "items": [
        {
            "outcome_item_id": "4",
            "outcome_sport_id": "312"
        }
    ]
},
{
    "outcome_id": "5",
    "items": [
        {
            "outcome_item_id": "4",
            "outcome_sport_id": "313"
        }
    ]
}
]

我正在使用Newtonsoft.Json.Linq,想知道是否有一种方法可以选择所有outcome_id = 4的标记?希望我的问题已经足够清晰。因为我找不到任何适合满足我的需求的解决方案。

谢谢您提前的帮助!

2个回答

4
您可以将模型类创建为已知类型并反序列化json。然后,使用Linq简单地应用Where子句和Select子句;
public class Item
{
    public string outcome_item_id { get; set; }
    public string outcome_sport_id { get; set; }
}

public class JsonObject
{
    public string outcome_id { get; set; }
    public List<Item> items { get; set; }
}

var data = JsonConvert.DeserializeObject<List<JsonObject>>(json);
var outcome_ids = data.Where(x => x.outcome_id == "4").Select(x => x.outcome_id);

“Linq” 对我来说非常方便,但如果这是解决问题的唯一方法,那么我会选择它。谢谢。 - FireFalcon

0

我认为最好的方法是像@Stormcloak所说的那样使用类。

这只能是一种替代方法。

JArray jarray = JArray.Parse(jsonString);
var outComeTokens = (from token in jarray
                                 where token["outcome_id"].Value<string>().Equals("4")
                                 select token).FirstOrDefault();
var first_outcome_sport_id = outComeTokens["items"].Value<JArray>()[0]["outcome_sport_id"].Value<string>();

//第一个结果的运动ID 312


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接