vlambda博客
学习文章列表

C# 如何直接从 JSON String 中提取特定值 ?

咨询区


有一个 string,现在想从中提取出一些值,格式大概如下:


string1


"{\r\n   \"id\": \"100000280905615\",  
 \r\n \"name\": \"Jerard Jones\",  
 \r\n   \"first_name\": \"Jerard\",  
 \r\n   \"last_name\": \"Jones\",  
 \r\n   \"link\": \"https://www.facebook.com/Jerard.Jones\",  
 \r\n   \"username\": \"Jerard.Jones\",  
 \r\n   \"gender\": \"female\",  
 \r\n   \"locale\": \"en_US\"\r\n}"
  

string2

"{\r\n   \"id\": \"100000390001929\",  
  \r\n   \"name\": \"\\u05d1\\u05d2\\u05e8\\u15dc\\u25d9 \\u05d1\\u05e8\\u05d5\\u05e9\",  
  \r\n   \"first_name\": \"\\u05d4\\u05d2\\u05e7\\u02dc\\u05d9\",  
  \r\n   \"last_name\": \"\\u05d1\\u05e8\\u05d5\\u05e9\",  
  \r\n   \"link\": "
https://www.facebook.com/people/\\u05d2\\u05d1\\u05e@\\u05dc\\u05d9-\\u05d1\\u05e8\\u05d4\\u05e9/100000390001929\",  
  \r\n   \"gender\": \"female\",  
  \r\n   \"locale\": \"he_IL\"\r\n}"
  

请问我如何从中提取 idfirst_namelast_name 等等。。。

回答区

可以看出你的 string 是一个 json 格式,你可以通过 JSON.NET 将它转为 object,下面是一个将 string 转为动态类型的小例子,仅供参考:

string source = "{\r\n   \"id\": \"100000280905615\", \r\n \"name\": \"Jerard Jones\",  \r\n   \"first_name\": \"Jerard\", \r\n   \"last_name\": \"Jones\", \r\n   \"link\": \"https://www.facebook.com/Jerard.Jones\", \r\n   \"username\": \"Jerard.Jones\", \r\n   \"gender\": \"female\", \r\n   \"locale\": \"en_US\"\r\n}";  
dynamic data = JObject.Parse(source);  
Console.WriteLine(data.id);  
Console.WriteLine(data.first_name);  
Console.WriteLine(data.last_name);  
Console.WriteLine(data.gender);  
Console.WriteLine(data.locale);  

可以使用 DataContractJsonSerializer 类帮你实现 string 到 object 的转换,首先定义如下类:

public class Data  
{  
    public string Id {getset;}  
    public string Name {getset;}  
    public string First_Name {getset;}  
    public string Last_Name {getset;}  
    public string Username {getset;}  
    public string Gender {getset;}  
    public string Locale {getset;}  
}  

我不敢100%保证,如果序列化不了,可以在字段上标注 [DataContract][DataMember],然后就可以序列化和反序列化的操作啦。

private static readonly XmlObjectSerializer Serializer = new DataContractJsonSerializer(typeof(Data));  
  
// convert string to stream  
byte[] byteArray = Encoding.UTF8.GetBytes(contents);  
using(var stream = new MemoryStream(byteArray))  
{  
    (Data)Serializer.ReadObject(stream);  
}  

点评区

从jsonstring 中提取 value,逃不过使用 json序列化器,不过挺有意思的是:.NET曾出现过多个json序列化工具,比如:JavaScriptSerializer,还有针对 WCF 的 DataContractJsonSerializer,还有现在 .netcore3 出来的大一统 System.Text.Json.JsonSerializer ,眼花缭乱是不是哈😂


- EOF -

推荐阅读   点击标题可跳转


看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️