我尝试使用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以{}
(大括号)开头,但这里就像[]
(方括号)。我见过很多例子,但没有一个对我有用。
答案 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
。