【问题标题】:.Net Regex to parse specific JSON format.Net Regex 解析特定的 JSON 格式
【发布时间】:2023-04-07 11:00:01
【问题描述】:

我正在编写一个小的 Web 服务,它以具有各种“主题”的图像的形式生成 SO/SF/SU/MSO 用户风格。我发现这比使用 SO 提供的 HTML/JS 解决方案更可取,因为它更灵活,并且在论坛签名中也能更好地工作。

我正在使用显然是非官方的 API (More info here) 检索数据。我可以拥有 HTML 或 JSON 格式的数据。我认为 JSON 会更容易解析。

不幸的是,我不擅长正则表达式。我能想到的最好的就是一些非常老套的子串。我相信正则表达式应该是最优雅的解决方案,但欢迎其他建议。

有人可以为我指出正确的方向以获取匹配的正则表达式 ID、GravatarURL、ProfileURL、DisplayName、声誉和徽章计数(青铜/白银/黄金)。

FWIW 这将在 VB.Net 项目中使用(以防完全影响语法)

{"id":1,"gravatarHtml":"\u003cimg src=\"http://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8?s=50&d=identicon&r=PG\" height=\"50\" width=\"50\" alt=\"\"\u003e","profileUrl":"http://stackoverflow.com/users/1/jeff-atwood","displayName":"Jeff Atwood","reputation":"18,446","badgeHtml":"\u003cspan title=\"8 gold badges\"\u003e\u003cspan class=\"badge1\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e8\u003c/span\u003e\u003c/span\u003e\u003cspan title=\"57 silver badges\"\u003e\u003cspan class=\"badge2\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e57\u003c/span\u003e\u003c/span\u003e\u003cspan title=\"72 bronze badges\"\u003e\u003cspan class=\"badge3\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e72\u003c/span\u003e\u003c/span\u003e"}

或者更易读的格式:

{
"id":1,
"gravatarHtml":"\u003cimg src=\"http://www.gravatar.com/avatar/51d623f33f8b83095db84ff35e15dbe8?s=50&d=identicon&r=PG\" height=\"50\" width=\"50\" alt=\"\"\u003e",
"profileUrl":"http://stackoverflow.com/users/1/jeff-atwood",
"displayName":"Jeff Atwood",
"reputation":"18,446",
"badgeHtml":"
    \u003cspan title=\"8 gold badges\"\u003e\u003cspan class=\"badge1\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e8\u003c/span\u003e\u003c/span\u003e
    \u003cspan title=\"57 silver badges\"\u003e\u003cspan class=\"badge2\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e57\u003c/span\u003e\u003c/span\u003e
    \u003cspan title=\"72 bronze badges\"\u003e\u003cspan class=\"badge3\"\u003e●\u003c/span\u003e\u003cspan class=\"badgecount\"\u003e72\u003c/span\u003e\u003c/span\u003e
"
}

(注意:值得注意的是,如果您没有任何特定徽章,则根本没有该徽章的条目,而不是显示“0”)

不幸的是,我什至不知道从哪里开始使用正则表达式,因此非常感谢任何帮助、建议或文档

[编辑]

如果你们中的任何人感兴趣,可以在此处获得一些正在开发的天赋截图:MeJeff AtwoodJoel Spolsky

如果有人想要自己的,我会公开访问吗?

[/编辑]

【问题讨论】:

    标签: .net vb.net regex json


    【解决方案1】:

    首先,不要使用正则表达式来解析 JSON。与 HTML 一样,JSON 不是常规语言,因此正则表达式无法真正解析它 - 只能提供很差的近似值,这很容易让人头疼。

    相反,您可能想研究 JSON 解析器,例如 JavaScriptSerializerJson.NET

    【讨论】:

    • 谢谢 - 这比正则表达式要好得多,而且很有用
    【解决方案2】:

    您是否考虑过使用stackexchange-api

    这是您想要实现的代码示例

            User JeffAtwood =
              User.GetUserWithId(123456, StackExchangeSite.StackOverflow);
    
            long ID = JeffAtwood.Id;
            Uri gravatarHtml = JeffAtwood.Gravatar;
            String name = JeffAtwood.Name;           
            List<ReputationChange> repGraph = 
                JeffAtwood.ReputationGraph[DateTime.Now.AddDays(-3), DateTime.Now].ToList();
            long totalReputations = JeffAtwood.Reputation;
            List<Badge> badges = JeffAtwood.Badges.ToList();
             .
             .
    

    除了请求然后通过 Json 响应解析之外,您还可以使用简单的内置方法获得数百个其他位。

    对于解析 Jason 响应,最好使用的库是

    【讨论】:

    • 除了回答我的问题,您还解决了它背后的问题。非常感谢。我不知道 API 存在 - 肯定会是一个福音。
    • 希望很快能看到一个令人惊叹的 SOF 插件!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多