• C# 解析json字符串不创建新类{新的实体对象}


    来源:(47条消息) C#使用Newtonsoft不创建实体对象解析Json字符串_牛奶咖啡13的博客-CSDN博客

    一、使用Newtonsoft不创建实体对象解析Json字符串的示例演示

    1.1、首先需要引用命名空间

    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System.Collections;//Hashtable所需的命名空间
    1.2、解析首尾不带中括号[]的Json字符串

    1.2.1、核心的解析方法如下

    /// <summary>
    /// 解析Json字符串(首尾没有中括号)【线程安全】
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析好的Hashtable表</returns>
    private static Hashtable AnalayJsonString(string jsonStr)
    {
    Hashtable ht = new Hashtable();
    if (!string.IsNullOrEmpty(jsonStr))
    {
    JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);
    foreach (var item in jo)
    {
    ht.Add(item.Key,item.Value);
    }
    }

    return ht;
    }
    1.2.2、调用示例1如下:

    string strTmp = "{\"10101\":\"北京\",\"10102\":\"上海\"}";
    Hashtable ht = AnalayJsonString(strTmp);
    foreach (DictionaryEntry item in ht)
    {
    Console.WriteLine(item.Key + " " + item.Value);
    }
    1.2.3、解析示例1结果如下:


    1.2.4、调用示例2如下:

    string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"},\"shanghai\":{\"zone\":\"浦东\",\"zone_en\":\"pudong\"}}";
    Hashtable ht = AnalayJsonString(jsonText);
    foreach (DictionaryEntry item in ht)
    {
    Console.WriteLine(item.Key);
    Hashtable ht2 = AnalayJsonString(item.Value.ToString());
    foreach (DictionaryEntry item2 in ht2)
    {
    Console.WriteLine(" "+item2.Key + " " + item2.Value);
    }
    }
    1.2.5、解析示例2结果如下:

     

    1.2.6、解析指定键对应的值

    ①核心解析方法如下:

    /// <summary>
    /// 解析Json字符串为JObject(首尾没有中括号)
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析后的JObject对象</returns>
    private static JObject AnalayJsonStringToObj(string jsonStr)
    {
    if (!string.IsNullOrEmpty(jsonStr))
    {
    string strJsonIndex = string.Empty;
    JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);
    return jo;
    }
    else
    {
    return null;
    }
    }
    ②解析示例1如下:

    static void Main(string[] args)
    {
    string jsonText = "{\"10101\":\"北京\",\"10102\":\"上海\"}";
    JObject strTmp = AnalayJsonStringToObj(jsonText);
    Console.WriteLine("---解析结果为---"+strTmp["10101"]);

    Console.ReadLine();
    }
    ③运行示例1结果如下:

     

    ④解析示例2如下:

    static void Main(string[] args)
    {
    string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"},\"shanghai\":{\"zone\":\"浦东\",\"zone_en\":\"pudong\"}}";
    JObject strTmp = AnalayJsonStringToObj(jsonText);
    Console.WriteLine("---解析结果为---"+strTmp["beijing"]["zone"]);

    Console.ReadLine();
    }
    ⑤运行示例2结果如下:

     

    1.3、解析首不带中括号[]的Json字符串

    1.3.1、首先去除该Json字符串的首尾中括号,然后采用【1.2、解析首尾不带中括号[]的Json字符串】方法解析

    static void Main(string[] args)
    {
    string strTmp = "[{\"10101\":\"北京\",\"10102\":\"上海\"}]";
    //提取字符串中中括号里面的内容
    string strHanle = NumberOrStringOPC.GetBracketsContents(strTmp,1);
    //解析不带中括号Json字符串
    Hashtable ht = AnalayJsonString(strHanle);
    foreach (DictionaryEntry item in ht)
    {
    Console.WriteLine(item.Key + " " + item.Value);
    }
    Console.WriteLine("---------解析完成-------------");

    Console.ReadLine();
    }

    /// <summary>
    /// 解析Json字符串(首尾没有中括号)
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析好的Hashtable表</returns>
    private static Hashtable AnalayJsonString(string jsonStr)
    {
    Hashtable ht = new Hashtable();
    if (!string.IsNullOrEmpty(jsonStr))
    {
    JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);
    foreach (var item in jo)
    {
    ht.Add(item.Key,item.Value);
    }
    }

    return ht;
    }

    class NumberOrStringOPC
    {
    #region 提取括号里面的内容
    /// <summary>
    /// 提取小括号、中括号、大括号里面的字符串内容
    /// </summary>
    /// <param name="strNeedOPC">需要处理的字符串</param>
    /// <param name="bracketsType">括号的类型【0表示小括号1表示中括号2表示大括号】</param>
    /// <returns></returns>
    public static string GetBracketsContents(string strNeedOPC,int bracketsType=0)
    {
    string strTmp = string.Empty;
    if (!string.IsNullOrEmpty(strNeedOPC))
    {
    switch (bracketsType)
    {
    case 0:
    strTmp = Regex.Replace(strNeedOPC, @"(.*\()(.*)(\).*)", "$2");//获取小括号()里面的内容
    break;
    case 1:
    Regex rex = new Regex(@"(?i)(?<=\[)(.*)(?=\])");//获取中括号[]里面的内容正则规则
    strTmp = rex.Match(strNeedOPC).Value;
    break;
    case 2:
    strTmp= Regex.Match(strNeedOPC, @"\{(.*)\}", RegexOptions.Singleline).Groups[1].Value;//获取大括号{}里面的内容
    break;
    default:
    break;
    }
    }

    return strTmp;
    }

    #endregion
    }
    运行结果如下:

     

    1.3.2、直接进行解析

    核心解析方法

    /// <summary>
    /// 解析Json字符串(首尾有中括号)【线程安全】
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析好的Hashtable表</returns>
    private static Hashtable AnalayJsonStringMiddleBrackets(string jsonStr)
    {
    Hashtable ht = new Hashtable();
    if (!string.IsNullOrEmpty(jsonStr))
    {
    JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonStr);//jsonArrayText必须是带[]字符串数组
    if (jArray != null && jArray.Count > 0)
    {
    foreach (var item in jArray)
    {
    foreach (JToken jToken in item)
    {
    string[] strTmp = jToken.ToString().Split(':');
    ht.Add(strTmp[0].Replace("\"", ""), strTmp[1].Replace("\"", ""));
    }
    }
    }
    }
    return ht;
    }
    解析示例

    static void Main(string[] args)
    {
    string strTmp = "[{\"10101\":\"北京\",\"10102\":\"上海\"}]";

    //解析带中括号Json字符串
    Hashtable ht = AnalayJsonStringMiddleBrackets(strTmp);
    foreach (DictionaryEntry item in ht)
    {
    Console.WriteLine(item.Key + " " + item.Value);
    }
    Console.WriteLine("---------解析完成-------------");

    Console.ReadLine();
    }

    运行结果如下:


    1.3.3、解析指定键对应的值

    ①核心方法如下:

    /// <summary>
    /// 解析Json字符串为JArray(首尾有中括号)
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析后的JArray对象</returns>
    private static JArray AnalayJsonStringToJArray(string jsonStr)
    {
    if (!string.IsNullOrEmpty(jsonStr))
    {
    string strJsonIndex = string.Empty;
    JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr);
    return ja;
    }
    else
    {
    return null;
    }
    }
    ②解析示例如下:

    static void Main(string[] args)
    {
    string jsonText = "[{\"10101\":\"北京\",\"10102\":\"上海\"}]";
    JArray strTmp = AnalayJsonStringToJArray(jsonText);
    Console.WriteLine("---解析结果为---"+strTmp[0]["10101"]);

    Console.ReadLine();
    }
    ③运行结果如下:

     

    二、使用Newtonsoft不创建实体对象解析Json字符串的通用类

    注意:需要引用Newtonsoft.dll

    其中Newtonsoft.dll库的官方下载链接为:微软官方指定Newtonsoft库下载地址


    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System.Collections;

    class AnalayJson
    {
    #region 解析Json字符串(首尾没有中括号)
    /// <summary>
    /// 解析Json字符串(首尾没有中括号)【线程安全】
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析好的Hashtable表</returns>
    public static Hashtable AnalayJsonString(string jsonStr)
    {
    Hashtable ht = new Hashtable();
    if (!string.IsNullOrEmpty(jsonStr))
    {
    JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);
    foreach (var item in jo)
    {
    ht.Add(item.Key, item.Value);
    }
    }

    return ht;
    }

    /// <summary>
    /// 解析Json字符串为JObject(首尾没有中括号)
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析后的JObject对象</returns>
    public static JObject AnalayJsonStringToJObject(string jsonStr)
    {
    if (!string.IsNullOrEmpty(jsonStr))
    {
    string strJsonIndex = string.Empty;
    JObject jo = (JObject)JsonConvert.DeserializeObject(jsonStr);
    return jo;
    }
    else
    {
    return null;
    }
    }

    #endregion

    #region 解析Json字符串(首尾有中括号)

    /// <summary>
    /// 解析Json字符串(首尾有中括号)【线程安全】
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析好的Hashtable表</returns>
    public static Hashtable AnalayJsonStringMiddleBrackets(string jsonStr)
    {
    Hashtable ht = new Hashtable();
    if (!string.IsNullOrEmpty(jsonStr))
    {
    JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonStr);//jsonArrayText必须是带[]字符串数组
    if (jArray != null && jArray.Count > 0)
    {
    foreach (var item in jArray)
    {
    foreach (JToken jToken in item)
    {
    string[] strTmp = jToken.ToString().Split(':');
    ht.Add(strTmp[0].Replace("\"", ""), strTmp[1].Replace("\"", ""));
    }
    }
    }
    }
    return ht;
    }

    /// <summary>
    /// 解析Json字符串为JArray(首尾有中括号)
    /// </summary>
    /// <param name="jsonStr">需要解析的Json字符串</param>
    /// <returns>返回解析后的JArray对象</returns>
    public static JArray AnalayJsonStringMiddleBracketsToJArray(string jsonStr)
    {
    if (!string.IsNullOrEmpty(jsonStr))
    {
    string strJsonIndex = string.Empty;
    JArray ja = (JArray)JsonConvert.DeserializeObject(jsonStr);
    return ja;
    }
    else
    {
    return null;
    }
    }

    #endregion
    }

  • 相关阅读:
    蓝桥杯--算法训练 未名湖边的烦恼 (递归)
    hdoj--5606--tree(并查集)
    山东理工oj--1912--IP地址(水题)
    zzulioj--1634--Happy Thanksgiving Day
    45.java异常处理之抛出异常处理
    43.Java异常概要
    42.Java内部类
    41.Java特征之一多态
    40.Java接口
    39.Java值交换
  • 原文地址:https://www.cnblogs.com/smartisn/p/16097297.html
Copyright © 2020-2023  润新知