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

中文乱码:

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

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

写入格式:

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

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

格式化JSON示例:

  1. /// <summary>
  2. /// 格式化JSON字符串
  3. /// </summary>
  4. /// <param name="str">输入字符串</param>
  5. /// <returns>输出字符串</returns>
  6. public static string FormatJsonStr(string str)
  7. {
  8. JsonSerializer serializer = new JsonSerializer();
  9. TextReader tr = new StringReader(str);
  10. JsonTextReader jtr = new JsonTextReader(tr);
  11. object obj = serializer.Deserialize(jtr);
  12. if (obj != null)
  13. {
  14. StringWriter textWriter = new StringWriter();
  15. JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
  16. {
  17. Formatting = Formatting.Indented,
  18. Indentation = ,
  19. IndentChar = ' '
  20. };
  21. serializer.Serialize(jsonWriter, obj);
  22. return textWriter.ToString();
  23. }
  24. else
  25. {
  26. return str;
  27. }
  28. }

读写JSON示例:

  1. /// <summary>
  2. /// 读取JSON文件
  3. /// </summary>
  4. /// <param name="jsonPath">json文件路径</param>
  5. /// <returns>json字符串</returns>
  6. public static string ReadJsonString(string jsonPath)
  7. {
  8. if (!File.Exists(jsonPath))
  9. {
  10. LogHelper.Error("配置文件不存在:"+ jsonPath);
  11. return string.Empty;
  12. }
  13. return File.ReadAllText(jsonPath,Encoding.Default);
  14. }
  15.  
  16. /// <summary>
  17. ///读取JSON文件
  18. /// </summary>
  19. /// <param name="jsonPath">json文件路径</param>
  20. /// <returns>JObject对象</returns>
  21. public static JObject ReadJsonObj(string jsonPath)
  22. {
  23. string json = ReadJsonString(jsonPath);
  24. JObject jsonObj = null;
  25. if (!string.IsNullOrEmpty(json))
  26. {
  27. jsonObj=(JObject)JsonConvert.DeserializeObject(json);
  28. }
  29. return jsonObj;
  30. }
  31.  
  32. #region 写入JSON
  33. /// <summary>
  34. /// 写入JSON
  35. /// </summary>
  36. /// <returns></returns>
  37. public static bool Write(string jsonStr,string jsonPath)
  38. {
  39. try
  40. {
  41. System.IO.File.WriteAllText(jsonPath, jsonStr, Encoding.Default);
  42. return true;
  43. }
  44. catch (System.Exception ex)
  45. {
  46. LogHelper.Error("保存结果异常" + ex.Message + ex.StackTrace);
  47. return false;
  48. }
  49.  
  50. }
  51. #endregion

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

读写JSON作配置文件的更多相关文章

  1. Qt读写Json格式配置文件

    头文件Config.h #pragma once #include <QVariantMap> class Config { public: Config(const QString &a ...

  2. 二进制配置文件为什么比json等配置文件效率高

    二进制配置文件为什么比json等配置文件高效 项目中用spine做动画,spine可以导出json和二进制的动画配置文件,蛋疼的是spine官方竟然没有提供c的二进制配置解析代码,更没有提供它二进制文 ...

  3. C#中动态读写App.config配置文件

    转自:http://blog.csdn.net/taoyinzhou/article/details/1906996 app.config 修改后,如果使用cofnigurationManager立即 ...

  4. Android读写JSON格式的数据之JsonWriter和JsonReader

    近期的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西.近期打算找一份Android的工作,要继续拾起曾经的东西.公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才開始办公 ...

  5. C# 读写App.config配置文件

    一.C#项目中添加App.config配置文件 在控制台程序中,默认会有一个App.config配置文件,如果不小心删除掉,或者其他程序需要配置文件,可以通过添加得到. 添加步骤:右键项目名称,选择“ ...

  6. python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...

  7. iOS 如何用JSONKit读写JSON文件

     如何用JSONKit读写JSON文件 分类: ios2013-04-20 12:46 510人阅读 评论(0) 收藏 举报 JSON文件格式简单,使用方便,值得一用. 目前已经有多个库支持Json文 ...

  8. [08]ASP.NET Core 中 launchsettings.json 启动配置文件

    ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...

  9. delphi读写INI系统配置文件

    delphi读写INI系统配置文件 一.调用delphi内建单元 uses System.IniFiles; .使用类TIniFile .类TIniFile的主要方法和函数: {$IFDEF MSWI ...

随机推荐

  1. Mac下使用zsh不执行/etc/profile文件

    Mac下使用了zsh会不执行/etc/profile文件,当然,如果用原始的是会执行. 转而执行的是这两个文件,每次登陆都会执行: ~/.zshrc与/etc/zshenv与/etc/zshrc 所以 ...

  2. (转)windows 2003 远程桌面关闭 运行程序退出解决

    windows 2003 远程桌面关闭 运行程序退出解决 原文:http://2798996.blog.51cto.com/2788996/503365 情况:远程桌面到2003,运行一个程序,然后关 ...

  3. 【Java并发编程】:并发新特性—塞队列和阻塞栈

    阻塞队列 阻塞队列是Java5并发新特性中的内容,阻塞队列的接口是Java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue.Delay ...

  4. [转]asp.net core中的View Component

    解读ASP.NET 5 & MVC6系列(14):View Component http://www.cnblogs.com/TomXu/p/4496486.html

  5. 【链表】Insertion Sort List

    题目: Sort a linked list using insertion sort. 思路: 插入排序是一种O(n^2)复杂度的算法,基本想法相信大家都比较了解,就是每次循环找到一个元素在当前排好 ...

  6. sql server数据行号

    select ROW_NUMBER() over(order by createTime desc) as RowNum,NoticeContent,CreateTime from PTS_Notic ...

  7. C#中通过Lambda表达式为委托传入更多的参数

    如: DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (o, e) => { d ...

  8. PM2怎么开启ES6?

    node版本v6.14.2,无论是用配置文件 { "apps": [{ "name": "server", "script&quo ...

  9. Java并发编程-核心问题(1)

    一.常见问题 从小的方面讲, 并发编程最常见的问题就是可见性.原子性和有序性问题. 从大的方面讲, 并发编程最常见的问题就是安全性问题.活跃性问题和性能问题. 下面主要从微观上分析问题. 二.可见性问 ...

  10. [转]wx.getUserInfo(OBJECT) 微信小程序 获取用户信息

    本文转自:http://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html wx.getUserInfo(OBJECT) 获取用户信息,withCreden ...