• 用正则表达式简单解析JSON字符串


    目前JSON格式数据使用很广泛,无论在C#和Java中都经常会用到。

    解析JSON字符串,往往要依赖第三方库

    偶尔一个小功能,需引用第三方库来解析JSON有点得不偿失。

    反而直接用正则进行匹配更为直接有效(个人观点,不喜勿喷)。

    以下面JSON为例:

    {"kpjh":"","fpdm":"051002550521","fphm":"43460571","fplxdm":"026","hjse":"0.00","kprq":"20220714133345","jshj":"155633.64","mw":"03-8408+>*5+<1>796>622-98<>2*736+6/360527166/9<>9420<-+*-**<82/9/01/+7650><*-+3","hjje":"155633.64","jym":"1629240248**833707375"}

    需求:需解析出里面指定的字段值,如:fpdm字段。

    实现:用正则表达式进行字段匹配:

    表达式:String reg = "(?:\"" + key + "\"):\"(?[^\"]*?)\""; key 为要匹配的字段名称。

    原理:环视要匹配的字段,再将字段值命名捕获到val。

    注意:默认匹配字符串中不含有"号才适用。

    JAVA代码

    1. import java.util.regex.Matcher;
    2. import java.util.regex.Pattern;
    3. public class Main {
    4. public static void main(String[] args) throws Exception {
    5. String text = "{\"kpjh\":\"\",\"fpdm\":\"051002550521\",\"fphm\":\"43460571\",\"fplxdm\":\"026\",\"hjse\":\"0.00\",\"kprq\":\"20220714133345\",\"jshj\":\"155633.64\",\"mw\":\"03-8408+>*5+<1>796>622-98<>2*736+6/360527166/9<>9420<-+*-**<82/9/01/+7650><*-+3\",\"hjje\":\"155633.64\",\"jym\":\"1629240248**833707375\"}";
    6. String key = "fpdm";//要匹配的字段
    7. String reg = "(?:\"" + key + "\"):\"(?[^\"]*?)\"";//原理:环视要匹配的字段,再将字段值命名捕获到val
    8. Pattern pattern = Pattern.compile(reg);
    9. Matcher matcher = pattern.matcher(text);
    10. String value = "";
    11. while (matcher.find()) {
    12. value = matcher.group("val");
    13. }
    14. System.out.println("匹配:" + key + " = " + value);
    15. }
    16. }

    C#代码

    1. using System;
    2. using System.Text.RegularExpressions;
    3. namespace ConsoleApp1
    4. {
    5. internal class Program
    6. {
    7. private static void Main(string[] args)
    8. {
    9. var text = "{\"kpjh\":\"\",\"fpdm\":\"051002550521\",\"fphm\":\"43460571\",\"fplxdm\":\"026\",\"hjse\":\"0.00\",\"kprq\":\"20220714133345\",\"jshj\":\"155633.64\",\"mw\":\"03-8408+>*5+<1>796>622-98<>2*736+6/360527166/9<>9420<-+*-**<82/9/01/+7650><*-+3\",\"hjje\":\"155633.64\",\"jym\":\"1629240248**833707375\"}";
    10. var key = "fpdm"; //要匹配的字段
    11. var reg = "(?:\"" + key + "\"):\"(?[^\"]*?)\""; //原理:环视要匹配的字段,再将字段值命名捕获到val
    12. var val = new Regex(reg).Match(text).Groups["val"].Value;
    13. Console.Write("匹配:"+key + "= " + val);
    14. }
    15. }
    16. }

  • 相关阅读:
    聚观早报 | 抖音上线 Mac 客户端;理想 ONE 将不会再生产
    83文章解读与程序——《考虑储能优化的微网能量管理双层模型》已提供下载资源
    RabbitMQ 学习(三)-- Work Queues
    C++面经汇总
    CH340 各型号的区别
    npm install / webdriver-manager update报错 unable to get local issuer certificate
    前端每日小知识 保持学习
    c++处理tcp粘包问题以及substr方法
    Django常见面试题总结(二)
    Revit翻模教程:怎么在体量内绘制圆锥?
  • 原文地址:https://blog.csdn.net/a497785609/article/details/125905421