如何使用正则表达式从 JSON 结构中提取子节点?

Posted

技术标签:

【中文标题】如何使用正则表达式从 JSON 结构中提取子节点?【英文标题】:How can I use regex to extract child node from JSON structure? 【发布时间】:2018-08-22 22:14:12 【问题描述】:

您好,我尝试在 json 中获取 json 数据。但是我的班级是 Employee 我的服务将 json 创建为 com.myteam.rbffiyatlama2.Employee 这个前缀可以更改,所以我必须编写一个解决方案来获取 json 的确切部分,如下所示,但我的下面的代码不起作用。我会将我的节点名称发送到 Getjsonobject(Employee emp)Getjsonobject(Customer cust)Getjsonobject(Student student) 等方法。

我的 Json:



   "type": "SUCCESS",
   "msg": "Container RBFFiyatlama2_1.0.1 successfully called.",
   "result": "execution-results":    
      "results":       [
                  
            "value": 2,
            "key": ""
         ,
                  
            "value": "com.myteam.rbffiyatlama2.Employee":             
               "salary": 2400,
               "age": 35,
               "cofactor": 0.2
            ,
            "key": "t1"
         ,
                  
            "value": "com.myteam.rbffiyatlama2.Employee":             
               "salary": 4800,
               "age": 35,
               "cofactor": 0.2
            ,
            "key": "t2"
         
      ],
      "facts":       [
                  
            "value": "org.drools.core.common.DefaultFactHandle": "external-form": "0:50:1980606587:1980606587:100:DEFAULT:NON_TRAIT:com.myteam.rbffiyatlama2.Employee",
            "key": "t1"
         ,
                  
            "value": "org.drools.core.common.DefaultFactHandle": "external-form": "0:51:2052360932:2052360932:99:DEFAULT:NON_TRAIT:com.myteam.rbffiyatlama2.Employee",
            "key": "t2"
         
      ]
   


class Program

    static void Main(string[] args)
    

        var employee1 = new Employee()  age = 35, cofactor = 0.2, salary = 2000 ;
        var employee2 = new Employee()  age = 35, cofactor = 0.2, salary = 4000 ;

        var list = new List<Employee>();
        list.Add(employee1);
        list.Add(employee2);
        var uri = new Uri("http://localhost:8080/kie-server/services/rest/server/containers/instances/RBFFiyatlama2_1.0.1");
        var kieclient = new KieRequestWrapper<Employee>(uri, "kieserver", "@test2018", MethodType.POST, "application/json").Add(list).Run();
        Console.Write(kieclient.Content);
        var match = Regex.Match(kieclient.Content, @"(?*.Employee*)");
        var result= MyParser.Parse(match, typeof(Employee)); //Desired
        Console.Read();

    


public class Employee

    public int age  get; set; 
    public double cofactor  get; set; 
    public int salary  get; set; 

【问题讨论】:

简短的回答,你不,你使用像 Json.Net 这样的 json 解析器 我认为以下内容也适用于这个问题,因为 JSON 也不是常规语言:***.com/a/1732454/5311735 既然已经有专用的内置函数,为什么还要重新发明一个正则表达式? 【参考方案1】:

您不想使用 XPath 来获取您需要的数据,您想将 JSON 字符串反序列化为一个对象,然后获取您需要的数据。有很多 JSON 序列化库,最常见的一个,AFAIK,是JSON.NET。您可以在这里查看反序列化的工作原理:https://www.newtonsoft.com/json/help/html/DeserializeObject.htm

例子:

public class Account

    public string Email  get; set; 
    public bool Active  get; set; 
    public DateTime CreatedDate  get; set; 
    public IList<string> Roles  get; set; 


string json = @"
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
";

Account account = JsonConvert.DeserializeObject<Account>(json);

Console.WriteLine(account.Email);
// james@example.com

【讨论】:

以上是关于如何使用正则表达式从 JSON 结构中提取子节点?的主要内容,如果未能解决你的问题,请参考以下文章

十Jmeter 关联-正则表达式提取器

使用正则表达式从 Ruby 中的字符串中提取子字符串

如何使用正则表达式将特定的子字符串提取到新行中?

使用 PHP 正则表达式从 html 中提取 JSON 对象

使用正则表达式从 mysql 列中提取子字符串

Java使用正则表达式提取字段分隔的子字符串