Use PlantUML to display JSON Data

Display JSON Data

JSON format is widely used in software.

You can use PlantUML to visualize your data.

To activate this feature, the diagram must:

  • begin with @startjson keyword
  • end with @endjson keyword.

|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "fruit":"Apple", "size":"Large", "color": ["Red", "Green"] } @endjson |

Complex example

You can use complex JSON structure.

|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 27, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spouse": null } @endjson |

Highlight

|---|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson #highlight "lastName" #highlight "address" / "city" #highlight "phoneNumbers" / "0" / "number" { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 28, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spouse": null } @endjson |

Using different styles for highlight

It is possible to have different styles for different highlights.

|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson #highlight "lastName" #highlight "address" / "city" <

> #highlight "phoneNumbers" / "0" / "number" <

> { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 28, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [], "spouse": null } @endjson |

JSON basic element

Synthesis of all JSON basic element

|---|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "null": null, "true": true, "false": false, "JSON_Number": [-1, -1.1, "color:greenTBC"], "JSON_String": "a\nb\rc\td color:greenTBC...", "JSON_Object": { "{}": {}, "k_int": 123, "k_str": "abc", "k_obj": {"k": "v"} }, "JSON_Array" : [ [], [true, false], [-1, 1], ["a", "b", "c"], ["mix", null, true, 1, {"k": "v"}] ] } @endjson |

JSON array or table

Array type

|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "Numeric": [1, 2, 3], "String ": ["v1a", "v2b", "v3c"], "Boolean": [true, false, true] } @endjson |

Minimal array or table

Number array

|---|--------------------------------------------------------------------------------------------------------------------------------|
| | @startjson [1, 2, 3] @endjson |

String array

|---|-----------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson ["1a", "2b", "3c"] @endjson |

Boolean array

|---|------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson [true, false, true] @endjson |

JSON numbers

|---|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "DecimalNumber": [-1, 0, 1], "DecimalNumber . Digits": [-1.1, 0.1, 1.1], "DecimalNumber ExponentPart": [1E5] } @endjson |

JSON strings

JSON Unicode

On JSON you can use Unicode directly or by using escaped form like \uXXXX.

|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "color:bluecode": "color:bluevalue", "a\u005Cb": "a\u005Cb", "\uD83D\uDE10": "\uD83D\uDE10", "😐": "😐" } @endjson |

JSON two-character escape sequence

|---|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "legend: character name": ["two-character escape sequence", "example (between 'a' and 'b')"], "quotation mark character (U+0022)": ["\"", "a"b"], "reverse solidus character (U+005C)": ["\\", "a\b"], "solidus character (U+002F)": ["\/", "a/b"], "backspace character (U+0008)": ["\b", "a\bb"], "form feed character (U+000C)": ["\f", "a\fb"], "line feed character (U+000A)": ["\n", "a\nb"], "carriage return character (U+000D)": ["\r", "a\rb"], "character tabulation character (U+0009)": ["\t", "a\tb"] } @endjson |

FIXME

FIXME or not 😉, on the same item as \n management in PlantUML 😉 See Report Bug on QA-13066

FIXME

|---|------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson [ "\\", "\n", "\r", "\t" ] @endjson |

Minimal JSON examples

|---|-------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson "Hello world!" @endjson |

|---|-------------------------------------------------------------------------------------------------------------------------|
| | @startjson 42 @endjson |

|---|---------------------------------------------------------------------------------------------------------------------------|
| | @startjson true @endjson |

(Examples come from STD 90 - Examples)

Empty table or list

|---|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson { "empty_tab": [], "empty_list": {} } @endjson |

Ref. [QA-14397](https://forum.plantuml.net/14397 "QA-14397")

Using (global) style

Without style (by default)

|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson #highlight "1" / "hr" [ { "name": "Mark McGwire", "hr": 65, "avg": 0.278 }, { "name": "Sammy Sosa", "hr": 63, "avg": 0.288 } ] @endjson |

With style

You can use style to change rendering of elements.

|---|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startjson #highlight "1" / "hr" [ { "name": "Mark McGwire", "hr": 65, "avg": 0.278 }, { "name": "Sammy Sosa", "hr": 63, "avg": 0.288 } ] @endjson |

Adapted from [QA-13123](https://forum.plantuml.net/13123 "QA-13123") and [QA-13288](https://forum.plantuml.net/13288/ "QA-13288")

Display JSON Data on Class or Object diagram

Simple example

|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startuml class Class object Object json JSON { "fruit":"Apple", "size":"Large", "color": ["Red", "Green"] } @enduml |

Ref. [QA-15481](https://forum.plantuml.net/15481/possible-link-elements-from-two-jsons-with-both-jsons-embeded?show=15567#c15567 "QA-15481")

Complex example: with all JSON basic element

|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startuml json "JSON basic element" as J { "null": null, "true": true, "false": false, "JSON_Number": [-1, -1.1, "color:greenTBC"], "JSON_String": "a\nb\rc\td color:greenTBC...", "JSON_Object": { "{}": {}, "k_int": 123, "k_str": "abc", "k_obj": {"k": "v"} }, "JSON_Array" : [ [], [true, false], [-1, 1], ["a", "b", "c"], ["mix", null, true, 1, {"k": "v"}] ] } @enduml |

Display JSON Data on Deployment (Usecase, Component, Deployment) diagram

Simple example

|---|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startuml allowmixing component Component actor Actor usecase Usecase () Interface node Node cloud Cloud json JSON { "fruit":"Apple", "size":"Large", "color": ["Red", "Green"] } @enduml |

Ref. [QA-15481](https://forum.plantuml.net/15481/possible-link-elements-from-two-jsons-with-both-jsons-embeded?show=15567#c15567 "QA-15481")

Complex example: with arrow

|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startuml allowmixing agent Agent stack { json "JSON_file.json" as J { "fruit":"Apple", "size":"Large", "color": ["Red", "Green"] } } database Database Agent -> J J -> Database @enduml |

Display JSON Data on State diagram

Simple example

|---|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | @startuml state "A" as stateA state "C" as stateC { state B } json J { "fruit":"Apple", "size":"Large", "color": ["Red", "Green"] } @enduml |

Ref. [QA-17275](https://forum.plantuml.net/17275/composite-state-functionality-with-allow_mixing?show=17287#a17287 "QA-17275")

相关推荐
蓝悦无人机7 小时前
LangChain v1.0 系列教程——第2章 工具系统
langchain·json·装饰器模式·pydantic
Lyra_Infra11 小时前
从一段错误 JSON 说起:Policy、Role 与 IAM
后端·json·aigc
羑悻的小杀马特12 小时前
数据织网者:Jsoncpp库深度解析——从C++原生JSON处理到工程级数据交互实战全攻略
c++·json·交互·jsoncpp·原生库
代码什么用13 小时前
JSON一文速通
java·json
小小测试开发1 天前
LLM 结构化输出测试:Schema 契约 + 故障注入,让工具调用的 JSON 不再靠重试赌运气
人工智能·json
hasty1 天前
_proto__ 不是普通键:从 JSON 反序列化看原型污染
安全·json
代码中介商1 天前
JSON 完全指南:从语法到项目实战
json
名字还没想好☜1 天前
Go 用 json.Decoder 流式解析大 JSON:边读边处理不爆内存
开发语言·后端·golang·go·json
gf13211112 天前
【python_发送飞书卡片消息_直接组装JSON格式发送卡片】
python·json·飞书
有梦想的咕噜2 天前
Newtonsoft.Json (Json.NET) 常用方法汇总
linux·json·.net