Skip to content

c#如何将有规律的文本转为json

约 1081 字大约 4 分钟

c#json

2025-06-09

如何将有规律的文本内容,转换成json字符串呢?

—-分隔符拼接的文本

首先,本实例使用的有规律的文本格式是带有“—-”分隔符的多行文本内容,如下图:

带有—-分隔符的多行文本txt

目标:要转换成的json格式

做事情,得有目标,知道要做到什么,然后才能有导向。 以下是本人要转成的目标json格式字符串:

{
  "1344000": {
    "运营商": "四川移动全球通卡",
    "归属地": "四川省绵阳市"
  },
  "1344001": {
    "运营商": "四川移动全球通卡",
    "归属地": "四川省自贡市"
  },
  "1344002": {
    "运营商": "四川移动全球通卡",
    "归属地": "四川省攀枝花市"
  },
  "1344003": {
    "运营商": "四川移动全球通卡",
    "归属地": "四川省广元市"
  },
  "1344004": {
    "运营商": "四川移动全球通卡",
    "归属地": "四川省达州市"
  }
}

目标json格式字符串分析:

目标json格式,第一层是Dictionary,键是字符串,值是object,该Dictionary是txt文本中,第一个内容,手机号前7位。

第二层也是一个Dictionary,但值类型不一样,键和值都是字符串,该Dictionary是txt文本中没有的,手动添加的。而值是txt文本中—-分割的第二和第三个内容。

如何将文本转为目标json格式

通过以上分析,知道了目标json格式是两层结构,都是键值对格式的对象。

1、首先,将txt文本分割第一次,得到一个字符串数组,数组中的内容是每一行内容组成的,比如得到第一行内容:

// 字符串数组中每项内容都是如下格式:
1344000----四川移动全球通卡----四川省绵阳市

2、然后,我们再来分割下,因为我们要得到去除—-后的内容,还要方便操作,所以还要再分割一次,将第一次字符串数组中的子内容分割成字符串数组,就得到了3个内容,如下:

{"1344000","四川移动全球通卡","四川省绵阳市"}

3、最后,我们再对第二次分割的得到的字符串数组进行目标json格式化。

1)、第二次分割得到的字符串数组的子内容,我这里假设为str2,假设为第一个内容,如下:

string[] str2 = new string[3]{"1344000","四川移动全球通卡","四川省绵阳市"};

2)、将str2[0]设置为json第一层中的键,再声明一个Dictionary键和值都是字符串string来做json的第二层。如下:

new Dictionary{ { "运营商", str2[1] }, { "归属地", str2[2] } }

实例代码

本实例用的Newtonsoft.Json库,要去NuGet中安装此库,并在代码中引用:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

关于此库的使用方法,自行百度或查看官方文档。以下是源代码:

// 读txt中数据
string data = File.ReadAllText("data.txt",Encoding.Default);
//string data = "1344000----四川移动全球通卡----四川省绵阳市\r\n1344001----四川移动全球通卡----四川省自贡市\r\n1344002----四川移动全球通卡----四川省攀枝花市";
//第一次分割,得到每行内容组成的字符串数组
string[] str1 = data.Split(new string[] {"\r\n"},StringSplitOptions.None);
// 循环遍历
var jsonText = new JObject();
for(int i = 0; i < str1.Length; i++)
{    
    // 第二次分割,得到每行内容中的每个内容
    string[] str2 = str1[i].Split(new string[] {"----"},StringSplitOptions.None);
    // 如果data.txt中的当前行文本内容不是标准的格式,那么跳过本次循环
    if(str2.Length <= 2)
    {
        continue;
    }
    // 声明一个变量接收一个匿名函数对象
    var content = new Dictionary<string, object>
    {
        {str2[0],new Dictionary<string,string>{ { "运营商", str2[1] }, { "归属地", str2[2] } } }
    };
    // 将对象转换成json格式字符串
    var json = JsonConvert.SerializeObject(content);
    // 将json字符串转换为json对象
    JObject j = JObject.Parse(json);
    // 合并两个json对象
    jsonText.Merge(j);
}
// 写最终得到的json字符串到本地data.json
File.WriteAllText("data.json", jsonText.ToString(),Encoding.Default);

转换最终效果如下图

将string内容转换成json格式内容

本博客采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可