无法在c#中解析此Json字符串

时间:2013-11-15 13:41:45

标签: c# json

我尝试使用Newtonsoft.Json反序列化这个json字符串,但我没有得到所需的输出。 我的json字符串是

[
{
"id": 1,
"key": "Residential Homeowner",
"i18nText": "unknown message code DB_ENUM_UserType_residentialhomeowner",
"i18nKey": "DB_ENUM_UserType_residentialhomeowner"
},
{
"id": 8,
"key": "VAR Dealer \/ Builder",
"i18nText": "unknown message code DB_ENUM_UserType_vardealer\/builder",
"i18nKey": "DB_ENUM_UserType_vardealer\/builder"
},
{
"id": 2,
"key": "Administrator",
"i18nText": "unknown message code DB_ENUM_UserType_administrator",
"i18nKey": "DB_ENUM_UserType_administrator"
},
{
"id": 9998,
"key": "TempGuidUser",
"i18nText": "unknown message code DB_ENUM_UserType_tempguiduser",
"i18nKey": "DB_ENUM_UserType_tempguiduser"
},
{
"id": 9999,
"key": "GuidUser",
"i18nText": "unknown message code DB_ENUM_UserType_guiduser",
"i18nKey": "DB_ENUM_UserType_guiduser"
}
]

当id = 1的值时,我只想要key的值。通常json以{}(大括号)开头,但这里就像[](方括号)。我见过很多例子,但没有一个对我有用。

4 个答案:

答案 0 :(得分:4)

  

一般来说,json以{}(大括号)开头,但这里就像[](方括号)。

这是因为你有一个对象数组,而不是一个对象。数组序列化为方括号。您应该将其反序列化为数组,然后在感兴趣的索引处获取对象。

答案 1 :(得分:4)

这是一篇在C#中解决JSON解析的相关帖子:C# JSON Parsing

如果括号有问题,只需使用:

string json = inputJson.Trim().Trim('[',']');

如果id的最小值为1,那么这应该有效:

string GetKey(string inputJson)
{
    string key = inputJson.Substring(inputJson.IndexOf("key")+5);
    key = key.Substring(key.IndexOf("\""), key.IndexOf(",")-key.IndexOf("\""));
    key = key.Trim('\"');
    return key;
}

答案 2 :(得分:3)

如果您只对来自较大JSON值的单个值感兴趣,则可能需要尝试Linq to JSON,这样您就可以查询JSON而无需反序列化所有内容。

示例:

JArray values = JArray.Parse(json);

string key;
var keyObject = values.FirstOrDefault(p => (int)p["id"] == 1);
if (keyObject != null)
{
     key = (string)keyObject["key"];
}

答案 3 :(得分:1)

[]用于定义json对象数组。您的输出应该是一个数组。遍历数组如:

for(var i=0; i<output.Length; i++)
{
    if(output[i].id == "1") // desired id
    {
        Console.WriteLine(output[i].key);// use it as you wish
    }
}

并使用找到的对象key