zoukankan      html  css  js  c++  java
  • 读写JSON作配置文件

    个人不太喜欢XML,于是找了JSON来做配置,JSON虽然有很多引号,但这种key-value的形式,非常符合我的思维,就像是一个萝卜一个坑。最近在读写JSON文件,需要注意两个问题。

    中文乱码:

    直接像读txt一样,读取json文件

    //最初的写法
    File.ReadAllText(jsonPath);
    //防止中文乱码
    File.ReadAllText(jsonPath,Encoding.Default);

    写入格式:

    将json转成字符串写入json文件时,发现没有任何换行、空格、Tab,特别不利于查看,尤其是当数据比较多、分级多较复杂的时候

    所以,在写入之前,应当作一下小小的处理,效果如下:

    格式化JSON示例:

    /// <summary>
    /// 格式化JSON字符串
    /// </summary>
    /// <param name="str">输入字符串</param>
    /// <returns>输出字符串</returns>
    public static string FormatJsonStr(string str)
    {
        JsonSerializer serializer = new JsonSerializer();
        TextReader tr = new StringReader(str);
        JsonTextReader jtr = new JsonTextReader(tr);
        object obj = serializer.Deserialize(jtr);
        if (obj != null)
        {
            StringWriter textWriter = new StringWriter();
            JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
            {
                Formatting = Formatting.Indented,
                Indentation = 4,
                IndentChar = ' '
            };
            serializer.Serialize(jsonWriter, obj);
            return textWriter.ToString();
        }
        else
        {
            return str;
        }
    }

    读写JSON示例:

    /// <summary>
    /// 读取JSON文件
    /// </summary>
    /// <param name="jsonPath">json文件路径</param>
    /// <returns>json字符串</returns>
    public static string ReadJsonString(string jsonPath)
    {
        if (!File.Exists(jsonPath))
        {
            LogHelper.Error("配置文件不存在:"+ jsonPath);
            return string.Empty;
        }
        return File.ReadAllText(jsonPath,Encoding.Default);
    }
     
    /// <summary>
    ///读取JSON文件
    /// </summary>
    /// <param name="jsonPath">json文件路径</param>
    /// <returns>JObject对象</returns>
    public static JObject ReadJsonObj(string jsonPath)
    {
        string json = ReadJsonString(jsonPath);
        JObject jsonObj = null;
        if (!string.IsNullOrEmpty(json))
        {
            jsonObj=(JObject)JsonConvert.DeserializeObject(json);
        }
        return jsonObj;
    }
     
    #region 写入JSON
    /// <summary>
    /// 写入JSON
    /// </summary>
    /// <returns></returns>
    public static bool Write(string jsonStr,string jsonPath)
    {
        try
        {
            System.IO.File.WriteAllText(jsonPath, jsonStr, Encoding.Default);
            return true;
        }
        catch (System.Exception ex)
        {
            LogHelper.Error("保存结果异常" + ex.Message + ex.StackTrace);
            return false;
        }
     
    }
    #endregion

     http://www.cnblogs.com/liweis/p/6408967.html

  • 相关阅读:
    【leetcode】500. Keyboard Row
    【排序算法汇总】5类8种排序算法
    【leetcode】339. Nested List Weight Sum
    ArcCatalog中将SQLServer中的空间数据导入到Oracle库中
    初学ArcGIS API for JavaScript
    ArcGIS API for JavaScript开发环境配置
    shapefile与gdb中不能允许存在的几何错误
    C#中的Dictionary字典类介绍(转载)
    泛型Dictionary<string,string>的用法
    空间数据存储格式wkb和wkt(转载)
  • 原文地址:https://www.cnblogs.com/fuqiang88/p/6607972.html
Copyright © 2011-2022 走看看