Regex替换JSON结构

本文关键字:结构 JSON 替换 Regex | 更新日期: 2023-09-27 17:51:14

我有这样的JSON文本:

 ...
 "simples":{
    "AS100ELABQVKANID-91057":{
       "meta":{
          "sku":"AS100ELABQVKANID-91057",
          "price":"3669000.00",
          "original_price":"3379000.00",
          "special_to_date":"2015-03-19 23:59:59",
          "shipment_type":"1",
          "special_price":"3299000.00",
          "tax_percent":"10.00",
          "sourceability":"Sourceable",
          "quantity":"15",
          "variation":"...",
          "package_type_position":"0",
          "min_delivery_time":"1",
          "max_delivery_time":"3",
          "attribute_set_name":"electronics",
          "3hours_shipment_available":false,
          "estimated_delivery":"",
          "estimated_delivery_position":""
       },
       "attributes":{
          "package_type":"Parcel"
       }
    }
 },
 "description":  
 ...

上述文本在我的JSON文本中反复出现。我试图建立每一个结果:

"简单":[],"描述"

到目前为止,我已经制作了这个regex:
'"simples'":{(?:.*v(?:|=)|(?:.*)?)},'"description'"

但是结果是从我的第一个"simples"切到最后一个"description"。这里是正则表达式新手。

Thanks in advance

Regex替换JSON结构

我建议解析JSON,替换值,然后重新字符串化它

var obj = JSON.parse(json);
obj.simples = [];
json = JSON.stringify(obj);

用regexp来做这个简直是疯了

不要使用正则表达式解析JSON;使用JSON解析器。

下面是如何使用JSON做到这一点。Net,假设包含simples的对象是平面结果列表的一部分:

JArray array = JArray.Parse(json);
foreach (JObject obj in array)
{
    obj["simples"].Parent.Remove();
}
json = array.ToString();

如果您的JSON更复杂(例如:"简单"可以出现在JSON中的多个级别),那么您将需要递归搜索来查找和删除它。这个答案有一个助手方法,它可以在JSON中的任何位置按名称查找特定属性,并返回所有出现的列表。一旦有了出现的列表,就可以循环遍历它们并删除它们,如上所示。