如何使<pre>标签内jws属性文本与verificationMethod保持一致缩进?
解决JSON中JWS属性缩进对齐的问题
我明白你想让jws属性的换行内容和verificationMethod保持相同的缩进层级(也就是你标注的红条位置),这里有几个实用的解决方案,分场景给你说明:
1. 手动调整(适合手动编写JSON的场景)
如果是你自己手写这段JSON,最简单的方式就是在jws值的换行开头,手动添加和verificationMethod属性名起始位置一致的空格(或制表符)。
要是你需要把超长的JWS字符串拆成多行(JSON允许字符串内换行,只要用转义符\),可以这样写:
{ "someOtherProperty": "example_value", "verificationMethod": "proof_verification_method", "jws": "YLkE1a599r244BP9SZ99owq93B411d3iU2H7589X7Tx7zUQPJ8VLblPtm2PL4bGR0Y2tym630tzEpTtFNoD41Oy8o5QMpSSa8Cf1C5M55Vz228Sy73eMGO3n87v59o5Cz0o6x8N118761I860Z574g1OhW1C19LiLv96h883101690D3AYRE7m63i4YmE26t6LV2s7Ax27TsxRe7Q542YPj03M4hP2mMq743459n3w5B84vzIU8UtVaNf036E115641aO8OsED9c5FMl50320L6JW77a92t4J45G9Ht6NGw8vtR75V431x96756g780R6715CF43396E0s57H1S5Xa7921l80knj73F3H5kG9F14735JIr3LnI4Yod9iPD25p42DhQXx1nKF881A432d895D8K3rFJFk93mBI3h97MI9P3vf52506785oX1333v9z3W6ZmK5t5Eh1xWkijv3Wd832oDMhWVGU40S4Kh7q29c4Ym405H8" }
这样拆分后,每一行的JWS片段都会和verificationMethod保持对齐。
2. 用格式化工具自动处理(适合已有JSON需要美化的场景)
很多JSON格式化工具支持自定义换行规则,你可以设置“超过指定长度自动换行”,并让换行后的内容保持和属性名一致的缩进:
- VS Code:使用自带的格式化功能(快捷键
Ctrl+Shift+I),可以在设置里搜索json.format.maxLineLength,设置一个合适的数值(比如80),工具会自动把长字符串拆成多行并对齐。 - 本地/在线工具:比如一些JSON美化工具,找到“换行长字符串”或类似选项,设置缩进层级和行宽,就能一键生成对齐后的JSON。
3. CSS视觉对齐(适合网页显示时不修改JSON内容的场景)
如果只是在网页的<pre>标签里显示时需要对齐,不想修改JSON本身的内容,可以通过CSS调整视觉效果:
pre { font-family: inherit; white-space: break-spaces; word-break: break-all; /* 调整text-indent和padding-left的数值来匹配你的缩进需求 */ text-indent: -2em; padding-left: 2em; }
这个方法是通过文本缩进和内边距的配合,让换行后的内容自动对齐到目标位置,属于视觉层面的调整,不会改变JSON的实际内容。
4. 代码生成时自定义序列化(适合程序生成JSON的场景)
如果这段JSON是通过代码生成的,你可以在序列化的时候自定义逻辑,让长字符串自动换行并缩进。比如在JavaScript中:
const data = { verificationMethod: "proof_verification_method", jws: "YLkE1a599r244BP9SZ99owq93B411d3iU2H7589X7Tx7zUQPJ8VLblPtm2PL4bGR0Y2tym630tzEpTtFNoD41Oy8o5QMpSSa8Cf1C5M55Vz228Sy73eMGO3n87v59o5Cz0o6x8N118761I860Z574g1OhW1C19LiLv96h883101690D3AYRE7m63i4YmE26t6LV2s7Ax27TsxRe7Q542YPj03M4hP2mMq743459n3w5B84vzIU8UtVaNf036E115641aO8OsED9c5FMl50320L6JW77a92t4J45G9Ht6NGw8vtR75V431x96756g780R6715CF43396E0s57H1S5Xa7921l80knj73F3H5kG9F14735JIr3LnI4Yod9iPD25p42DhQXx1nKF881A432d895D8K3rFJFk93mBI3h97MI9P3vf52506785oX1333v9z3W6ZmK5t5Eh1xWkijv3Wd832oDMhWVGU40S4Kh7q29c4Ym405H8" }; // 自定义序列化函数,拆分长字符串并添加缩进 function stringifyWithAlignedLineBreaks(obj, indent = 2, maxLineLength = 80) { return JSON.stringify(obj, (key, value) => { if (typeof value === 'string' && value.length > maxLineLength) { const lineIndent = ' '.repeat(indent * 2); // 匹配属性的缩进层级 const chunks = value.match(new RegExp(`.{1,${maxLineLength}}`, 'g')); return chunks.join(`\\n${lineIndent}`); } return value; }, indent); } // 生成对齐后的JSON console.log(stringifyWithAlignedLineBreaks(data));
这段代码会把超长的JWS字符串拆成多行,每一行都自动添加对应缩进,和verificationMethod保持一致。
内容的提问来源于stack exchange,提问作者Antonio Santoro
相关产品推荐
相关产品推荐

