【问题标题】:How do I extract particular value based another another value?如何根据另一个值提取特定值?
【发布时间】:2020-06-08 08:30:45
【问题描述】:

所以我希望能够根据该对象是否具有特定属性来提取和 ID。我需要通过正则表达式来完成。这是我正在使用的 JSON 示例:

{
"workspaceid": ws01,
"data": {
    "workspacetitle": "My Workspace"
},
"collections": {
    "projects": [{
        "id": 01,
        "data": {
            "title": "My Project 01",
            "enddateperiod": "2020-02-20T23:59:59",
            "profilecomplete": true,
            "synced": false
        },
        "lists": {
            "projectcode": [{
                "id": pcodered,
                "data": {
                    "code": "myproject123",
                    "name": "OffshoreProject"
                }
            }]
        }
    }, {
        "id": 02,
        "data": {
            "title": "My Project 02",
            "enddateperiod": "2020-02-20T23:59:59",
            "profilecomplete": false,
            "synced": false
        },
        "lists": {
            "projectcode": [{
                "id": pcodered,
                "data": {
                    "code": "myproject123",
                    "name": "OffshoreProject"
                }
            }]
        }
    }]
}}

所以我要提取的是配置文件不完整的项目的ID(“profilecomplete”:false)。所以在这种情况下,我想选择项目 2 的 id(即 02)。

如何通过正则表达式做到这一点?我已经设法删除了所有的空格和新行,所以 JSON 基本上都是一长行。像这样提取正则表达式会更容易吗?无论哪种方式,我都可以使用一些帮助来获取此 ID。

注意:JSON 的格式不能更改。

【问题讨论】:

  • 为什么必须使用 Regex 而不是 JSON 解析器?
  • 这是我被告知的。你能帮忙吗?
  • 那么这是某种学校作业?因为这不可能是这样做的最佳途径......
  • 我明白了,但最好的路线并不是我想要的。感谢大家至少考虑我的问题。

标签: c# json regex


【解决方案1】:

这个有效

/"id": ([^,]*?)(?=,[^{]*{[^}]*"profilecomplete": false)/

解释:

  1. 首先读取所有这些字符 "id":[space]
  2. 然后读入不是“,”的组字符
  3. 然后是前瞻:您期望“,”,然后是不是“{”的字符,然后是“{”;最后,在匹配结束“}”之前,您要阅读 "profilecomplete": false

但我同意 JSON 解析器是我的首选!

【讨论】:

  • 谢谢你,大卫!这帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多