Json 属性和值的不同着色

Dra*_*rop 8 notepad++

使用 N++ 快速检查 Json,我有以下问题:
一切都具有相同的颜色。属性/文本值。

在 N++ Style Configurator 中,没有 Value 和 Property Name 选项。它只是字符串单引号或双引号。

必须有更好的色彩和可读性吗?

例子:

对于以下 Json:

{"description":{"title":"Contiguous U.S., Average Temperature","units":"Degrees Fahrenheit","base_period":"1901-2000"},"data":{"189512":{"value":"50.34","anomaly":"-1.68"},"189612":{"value":"51.99","anomaly":"-0.03"},"189712":{"value":"51.56","anomaly":"-0.46"}}}
Run Code Online (Sandbox Code Playgroud)

N++ 和在线工具将具有非常不同的着色:

在此处输入图片说明

在 N++ 中,您的眼睛必须寻找:然后回滚才能读取属性名称。特别是在多行数据上(缩进和自动回车,这样你就不会水平滚动到无穷大)。

通过具有更多不同的颜色,在线工具(不要忽略深色主题)确实更具可读性。

Pet*_*rCJ 7

Notepad++ 使用的Scintilla组件负责语法高亮的词法分析器。显然,该词法分析器的设计者并未决定区分属性名称和值,尽管这似乎是一个好主意。要对词法分析器的改进提出建议,您必须查看最新的 Scintilla JSON 词法分析器是否已经包含该更改,如果没有,向 Scintilla 项目提出请求。如果更改已经存在,或者 Scintilla 为您发布了带有该修复程序的新版本,则您必须要求 Notepad++ 开发人员升级 Scintilla 以包含该修复程序。(最后一次 NPP升级是 Scintilla 从 3.34 到 3.56 - 大约 4 年前 - 与最新的 Scintilla 4.1.3 相比)

解决方法 #1:更改样式配置器 > JSON > 运算符颜色,使其在属性和值之间具有显着性——可能带有亮黄色背景或其他东西——:至少让您的眼睛更容易找到分隔符...

变通方法#2:在社区论坛中,Claudia Frank 已经在基于 PythonScript 的词法分析器上做了一些工作,该词法分析器将允许使用正则表达式的用户定义语言,而不是简单的 UDL 2.1。我收集的她的工作链接位于https://notepad-plus-plus.org/community/topic/16164/bug-javascript-multiline-character-not-understood-by-notepad/11。通过一些努力,您可能能够以您喜欢的方式定义解析 JSON 所需的正则表达式。


更新:您可能能够获得 UDL(用户定义语言)来执行您想要的操作。我想出了一个快速的方法来突出您描述的差异。作为一个令人讨厌的副作用,它会破坏折叠(因此无法折叠{ ... }对。(我尝试设置 UDL 折叠选项,但嵌套折叠无法正常工作,至少在我第一次尝试时)

  • 语言 > 定义您的语言...新建= JsonPropertyValues。
  • 运算符和分隔符
  • 操作符 1 = , : " ' { }, STYLER = 设置任何你想要的标点颜色
  • Delimiter 1 style = OPEN: :, Close = ((EOL)), STYLER = 设置你想要的 VALUE 边的颜色;设置Nesting:为允许Operators 1
  • Delimiter 2 style = OPEN: ", Close = ", STYLER = 在双引号中设置左侧(属性)的颜色,不需要嵌套
  • Delimiter 3 style = OPEN: ', Close = ', STYLER = 在单引号中设置左侧(属性)的颜色,不需要嵌套

您可能希望设置Nesting:为包含Numbers在上述所有这些 STYLER 条目中。然后转到Comment & Number选项卡并定义 STYLER 以设置数字的颜色。

您可以将Ext框设置为json,如果您希望它应用于所有.JSON文件,或者您可以手动将Language > JsonPropertyValues应用于您想要以这种方式解析的任何 JSON。

无论如何,根据您的描述,这是一个合理的起点;随意定制它或将其扩展到包含的功能之外。

  • 对不起,我已经离开 SO 一个星期了。这个造型很棒。感谢您花时间制作这个答案。我会尝试两种可能性。 (2认同)