正则表达式过滤掉json字符串中的部分键值

Posted

技术标签:

【中文标题】正则表达式过滤掉json字符串中的部分键值【英文标题】:regular expression to filter out part of key value in a json string 【发布时间】:2011-05-08 20:11:33 【问题描述】:

我将以下 JSON 字符串作为日志行的一部分。

cells : "Lac":"7824","CntryISO":"us","NetTyp":"GSM","NetOp":"310260","Cid":"11983"

我想过滤成以下格式:"Lac":"7824","Cid":"11983"

如何使用正则表达式做到这一点?在 javascript 或 Python 中? 键是常量字符串(Lac,CntryISO,...),但值字符串是变化的。

【问题讨论】:

天啊! ***.com/questions/1732348/… 除了使用正则表达式解析 JSON 比使用它们解析 XML 更迟钝,因为 JSON 更容易正确使用。 对于那些认为这是智障问题的人...这是来自我从服务器获得的日志文本...我知道我可以轻松地重新构建 json 对象并对其进行操作...但是,为此为每个日志行创建一个 json 开销太大了....我相信 reg exp 应该能够处理它.. 【参考方案1】:

你为什么不用 JavaScript delete他们?

var myJson = "Lac":"7824","CntryISO":"us","NetTyp":"GSM","NetOp":"310260","Cid":"11983";

delete myJson.Lac;
delete myJson.cId;

【讨论】:

为什么 reg exp 不能处理这个?应该没那么难...我讨厌为每个日志行创建一个 json 对象并让 GC 不断运行。【参考方案2】:

既然可以只使用 JSON 解析器/序列化器,为什么还要使用正则表达式呢?如果你关心速度,可以试试 Python 中的 cjson,它比 Python 标准库中的 'json' 模块更快。

【讨论】:

我可以...但是需要为每个日志行创建 json 对象的开销...我只是想知道这对 reg exp 应该不难...也许我错了。跨度> 【参考方案3】:

扩展和解释@alex 答案:

JSON 是一种嵌套的多维结构。简单地过滤“Javascript 对象的字符串化形式”(又名 JSON)将在非常简单的情况下工作,但当结构不再平坦或它开始变得复杂时转义字段等时会迅速失败。

此时您将需要正确的解析逻辑。这很好地由 Javascript 本身提供,引用@alexes 代码:

var myJson = "Lac":"7824","CntryISO":"us","NetTyp":"GSM","NetOp":"310260","Cid":"11983";

delete myJson.Lac;
delete myJson.cId;

或者,如果你想使用 python,json 模块可以正常工作: http://docs.python.org/library/json.html

祝你好运! :)

【讨论】:

以上是关于正则表达式过滤掉json字符串中的部分键值的主要内容,如果未能解决你的问题,请参考以下文章

请问正则表达式如何过滤超链接和提取链接

正则表达式概述

教你轻松搞定javascript中的正则

Ruby正则表达式过滤掉带有“字符串”后缀的单词结尾

如何使用正则表达式过滤掉 c 类型的注释? [复制]

awk 系列:如何使用 awk 和正则表达式过滤文本或文件中的字符串