正则表达式取代JSON结构

时间:2014-03-21 07:28:17

标签: c# regex json json.net

我有这样的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文本中反复出现。我正在努力为此建立每一个结果:

  

" simples":[],"描述"

到目前为止,我已经制作了这个正则表达式:

\"simples\":{(?:.*v(?:|=)|(?:.*)?)},\"description\"

但结果是从我的第一个"simples"到最后一个"description"切断了所有内容。 正则表达新手在这里。

提前致谢

2 个答案:

答案 0 :(得分:3)

我建议解析JSON,替换值,然后重新对其进行字符串化

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

使用正则表达式是纯疯狂

答案 1 :(得分:-1)

不要使用Regex来解析JSON;使用JSON解析器。

以下是使用JSON.Net执行此操作的方法,假设包含simples的对象是结果列表的一部分:

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

如果您的JSON更复杂(即“简单”可能出现在JSON中的多个级别),那么您将需要递归搜索来查找和删除它。 This answer有一个帮助器方法,可以在JSON中的任何位置按名称查找特定属性,并返回所有出现的列表。获得事件列表后,您可以循环访问它们并将其删除,如上所示。