2023-03-08 15:43:29 +03:00
<!doctype html> < html lang = en class = no-js > < head > < meta charset = utf-8 > < meta name = viewport content = "width=device-width,initial-scale=1" > < meta name = author content = "Niels Lohmann" > < link href = https://json.nlohmann.me/features/comments/ rel = canonical > < link rel = icon href = ../../assets/images/favicon.png > < meta name = generator content = "mkdocs-1.4.2, mkdocs-material-8.5.10" > < title > Comments - JSON for Modern C++< / title > < link rel = stylesheet href = ../../assets/stylesheets/main.975780f9.min.css > < link rel = stylesheet href = ../../assets/stylesheets/palette.2505c338.min.css > < link rel = preconnect href = https://fonts.gstatic.com crossorigin > < link rel = stylesheet href = "https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback" > < style > : root { --md-text-font : "Roboto" ; --md-code-font : "JetBrains Mono" } < / style > < link rel = stylesheet href = ../../css/custom.css > < script > _ _md _scope = new URL ( "../.." , location ) , _ _md _hash = e => [ ... e ] . reduce ( ( e , _ ) => ( e << 5 ) - e + _ . charCodeAt ( 0 ) , 0 ) , _ _md _get = ( e , _ = localStorage , t = _ _md _scope ) => JSON . parse ( _ . getItem ( t . pathname + "." + e ) ) , _ _md _set = ( e , _ , t = localStorage , a = _ _md _scope ) => { try { t . setItem ( a . pathname + "." + e , JSON . stringify ( _ ) ) } catch ( e ) { } } < / script > < / head > < body dir = ltr data-md-color-scheme = default data-md-color-primary = indigo data-md-color-accent = indigo > < script > var palette = _ _md _get ( "__palette" ) ; if ( palette && "object" == typeof palette . color ) for ( var key of Object . keys ( palette . color ) ) document . body . setAttribute ( "data-md-color-" + key , palette . color [ key ] ) < / script > < input class = md-toggle data-md-toggle = drawer type = checkbox id = __drawer autocomplete = off > < input class = md-toggle data-md-toggle = search type = checkbox id = __search autocomplete = off > < label class = md-overlay for = __drawer > < / label > < div data-md-component = skip > < a href = #comments class = md-skip > Skip to content < / a > < / div > < div data-md-component = announce > < / div > < header class = md-header data-md-component = header > < nav class = "md-header__inner md-grid" aria-label = Header > < a href = ../.. title = "JSON for Modern C++" class = "md-header__button md-logo" aria-label = "JSON for Modern C++" data-md-component = logo > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 24 24" > < path d = "M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z" / > < / svg > < / a > < label class = "md-header__button md-icon" for = __drawer > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 24 24" > < path d = "M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z" / > < / svg > < / label > < div class = md-header__title data-md-component = header-title > < div class = md-header__ellipsis > < div class = md-header__topic > < span class = md-ellipsis > JSON for Modern C++ < / span > < / div > < div class = md-header__topic data-md-component = header-topic > < span class = md-ellipsis > Comments < / span > < / div > < / div > < / div > < form class = md-header__option data-md-component = palette > < input class = md-option data-md-color-media = "(prefers-color-scheme: light)" data-md-color-scheme = default data-md-color-primary = indigo data-md-color-accent = indigo aria-label = "Switch to dark mode" type = radio name = __palette id = __palette_1 > < label class = "md-header__button md-icon" title = "Switch to dark mode" for = __palette_2 hidden > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 24 24" > < path d = "M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z" / > < / svg > < / label > < input class = md-option data-md-color-media = "(prefers-color-scheme: dark)" data-md-color-scheme = slate data-md-color-primary = indigo data-md-color-accent = indigo aria-label = "Switch to light mode" type = radio name = __palette id = __palette_2 > < label class = "md-header__button md-icon" title = "Switch to light mode" for = __palette_1 hidden > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 24 24" > < path d = "M12 18c- . 89 0-1 . 74- . 2-2 . 5- . 55C11 . 56 16 . 5 13 14 . 42 13 12c0-2 . 42-1 . 44-4 . 5-3 . 5-5 . 45C10 . 26 6 . 2 11 . 11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9 . 31V4h-4 . 69L12 . 69 8
Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.
< / code > < / pre > < / div > < / blockquote > < / li > < li > < p > It is dangerous for interoperability if some libraries would add comment support while others don't. Please check < a href = https://tools.ietf.org/html/draft-iab-protocol-maintenance-01 > The Harmful Consequences of the Robustness Principle< / a > on this.< / p > < / li > < / ol > < p > However, you can pass set parameter < code > ignore_comments< / code > to < code class = highlight > < span class = nb > true< / span > < span class = w > < / span > < / code > in the parse function to ignore < code > //< / code > or < code > /* */< / code > comments. Comments will then be treated as whitespace.< / p > < div class = "admonition example" > < p class = admonition-title > Example< / p > < p > Consider the following JSON with comments.< / p > < div class = highlight > < pre > < span > < / span > < code > < span class = p > {< / span > < span class = w > < / span >
< span class = w > < / span > < span class = c1 > // update in 2006: removed Pluto< / span > < span class = w > < / span >
< span class = w > < / span > < span class = nt > " planets" < / span > < span class = p > :< / span > < span class = w > < / span > < span class = p > [< / span > < span class = s2 > " Mercury" < / span > < span class = p > ,< / span > < span class = w > < / span > < span class = s2 > " Venus" < / span > < span class = p > ,< / span > < span class = w > < / span > < span class = s2 > " Earth" < / span > < span class = p > ,< / span > < span class = w > < / span > < span class = s2 > " Mars" < / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Jupiter" < / span > < span class = p > ,< / span > < span class = w > < / span > < span class = s2 > " Uranus" < / span > < span class = p > ,< / span > < span class = w > < / span > < span class = s2 > " Neptune" < / span > < span class = w > < / span > < span class = cm > /*, " Pluto" */< / span > < span class = p > ]< / span > < span class = w > < / span >
< span class = p > }< / span > < span class = w > < / span >
< / code > < / pre > < / div > < p > When calling < code > parse< / code > without additional argument, a parse error exception is thrown. If < code > ignore_comments< / code > is set to < code > true< / code > , the comments are ignored during parsing:< / p > < div class = highlight > < pre > < span > < / span > < code > < span class = cp > #include< / span > < span class = w > < / span > < span class = cpf > < iostream> < / span > < span class = cp > < / span >
< span class = cp > #include< / span > < span class = w > < / span > < span class = cpf > " json.hpp" < / span > < span class = cp > < / span >
< span class = k > using< / span > < span class = w > < / span > < span class = n > json< / span > < span class = w > < / span > < span class = o > =< / span > < span class = w > < / span > < span class = n > nlohmann< / span > < span class = o > ::< / span > < span class = n > json< / span > < span class = p > ;< / span > < span class = w > < / span >
< span class = kt > int< / span > < span class = w > < / span > < span class = nf > main< / span > < span class = p > ()< / span > < span class = w > < / span >
< span class = p > {< / span > < span class = w > < / span >
< span class = w > < / span > < span class = n > std< / span > < span class = o > ::< / span > < span class = n > string< / span > < span class = w > < / span > < span class = n > s< / span > < span class = w > < / span > < span class = o > =< / span > < span class = w > < / span > < span class = sa > R< / span > < span class = s > " < / span > < span class = dl > (< / span > < span class = s > < / span >
< span class = s > {< / span >
< span class = s > // update in 2006: removed Pluto< / span >
< span class = s > " planets" : [" Mercury" , " Venus" , " Earth" , " Mars" ,< / span >
< span class = s > " Jupiter" , " Uranus" , " Neptune" /*, " Pluto" */]< / span >
< span class = s > }< / span >
< span class = s > < / span > < span class = dl > )< / span > < span class = s > " < / span > < span class = p > ;< / span > < span class = w > < / span >
< span class = w > < / span > < span class = k > try< / span > < span class = w > < / span >
< span class = w > < / span > < span class = p > {< / span > < span class = w > < / span >
< span class = w > < / span > < span class = n > json< / span > < span class = w > < / span > < span class = n > j< / span > < span class = w > < / span > < span class = o > =< / span > < span class = w > < / span > < span class = n > json< / span > < span class = o > ::< / span > < span class = n > parse< / span > < span class = p > (< / span > < span class = n > s< / span > < span class = p > );< / span > < span class = w > < / span >
< span class = w > < / span > < span class = p > }< / span > < span class = w > < / span >
< span class = w > < / span > < span class = k > catch< / span > < span class = w > < / span > < span class = p > (< / span > < span class = n > json< / span > < span class = o > ::< / span > < span class = n > exception< / span > < span class = w > < / span > < span class = o > & < / span > < span class = n > e< / span > < span class = p > )< / span > < span class = w > < / span >
< span class = w > < / span > < span class = p > {< / span > < span class = w > < / span >
< span class = w > < / span > < span class = n > std< / span > < span class = o > ::< / span > < span class = n > cout< / span > < span class = w > < / span > < span class = o > < < < / span > < span class = w > < / span > < span class = n > e< / span > < span class = p > .< / span > < span class = n > what< / span > < span class = p > ()< / span > < span class = w > < / span > < span class = o > < < < / span > < span class = w > < / span > < span class = n > std< / span > < span class = o > ::< / span > < span class = n > endl< / span > < span class = p > ;< / span > < span class = w > < / span >
< span class = w > < / span > < span class = p > }< / span > < span class = w > < / span >
< span class = w > < / span > < span class = n > json< / span > < span class = w > < / span > < span class = n > j< / span > < span class = w > < / span > < span class = o > =< / span > < span class = w > < / span > < span class = n > json< / span > < span class = o > ::< / span > < span class = n > parse< / span > < span class = p > (< / span > < span class = n > s< / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = cm > /* callback */< / span > < span class = w > < / span > < span class = k > nullptr< / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = cm > /* allow exceptions */< / span > < span class = w > < / span > < span class = nb > true< / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = cm > /* ignore_comments */< / span > < span class = w > < / span > < span class = nb > true< / span > < span class = p > );< / span > < span class = w > < / span >
< span class = w > < / span > < span class = n > std< / span > < span class = o > ::< / span > < span class = n > cout< / span > < span class = w > < / span > < span class = o > < < < / span > < span class = w > < / span > < span class = n > j< / span > < span class = p > .< / span > < span class = n > dump< / span > < span class = p > (< / span > < span class = mi > 2< / span > < span class = p > )< / span > < span class = w > < / span > < span class = o > < < < / span > < span class = w > < / span > < span class = sc > ' \n' < / span > < span class = p > ;< / span > < span class = w > < / span >
< span class = p > }< / span > < span class = w > < / span >
< / code > < / pre > < / div > < p > Output:< / p > < div class = highlight > < pre > < span > < / span > < code > [json.exception.parse_error.101] parse error at line 3, column 9:
syntax error while parsing object key - invalid literal;
last read: ' < U+000A> {< U+000A> /' ; expected string literal
< / code > < / pre > < / div > < div class = highlight > < pre > < span > < / span > < code > < span class = p > {< / span > < span class = w > < / span >
< span class = w > < / span > < span class = nt > " planets" < / span > < span class = p > :< / span > < span class = w > < / span > < span class = p > [< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Mercury" < / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Venus" < / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Earth" < / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Mars" < / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Jupiter" < / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Uranus" < / span > < span class = p > ,< / span > < span class = w > < / span >
< span class = w > < / span > < span class = s2 > " Neptune" < / span > < span class = w > < / span >
< span class = w > < / span > < span class = p > ]< / span > < span class = w > < / span >
< span class = p > }< / span > < span class = w > < / span >
2023-09-23 18:28:29 +03:00
< / code > < / pre > < / div > < / div > < hr > < div class = md-source-file > < small > Last update: < span class = "git-revision-date-localized-plugin git-revision-date-localized-plugin-date" > August 5, 2022< / span > < / small > < / div > < / article > < / div > < script > var tabs = _ _md _get ( "__tabs" ) ; if ( Array . isArray ( tabs ) ) e : for ( var set of document . querySelectorAll ( ".tabbed-set" ) ) { var tab , labels = set . querySelector ( ".tabbed-labels" ) ; for ( tab of tabs ) for ( var label of labels . getElementsByTagName ( "label" ) ) if ( label . innerText . trim ( ) === tab ) { var input = document . getElementById ( label . htmlFor ) ; input . checked = ! 0 ; continue e } } < / script > < / div > < a href = # class = "md-top md-icon" data-md-component = top hidden > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 24 24" > < path d = "M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z" / > < / svg > Back to top < / a > < / main > < footer class = md-footer > < nav class = "md-footer__inner md-grid" aria-label = Footer > < a href = ../binary_values/ class = "md-footer__link md-footer__link--prev" aria-label = "Previous: Binary Values" rel = prev > < div class = "md-footer__button md-icon" > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 24 24" > < path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z" / > < / svg > < / div > < div class = md-footer__title > < div class = md-ellipsis > < span class = md-footer__direction > Previous < / span > Binary Values < / div > < / div > < / a > < a href = ../element_access/ class = "md-footer__link md-footer__link--next" aria-label = "Next: Element Access" rel = next > < div class = md-footer__title > < div class = md-ellipsis > < span class = md-footer__direction > Next < / span > Element Access < / div > < / div > < div class = "md-footer__button md-icon" > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 24 24" > < path d = "M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z" / > < / svg > < / div > < / a > < / nav > < div class = "md-footer-meta md-typeset" > < div class = "md-footer-meta__inner md-grid" > < div class = md-copyright > < div class = md-copyright__highlight > Copyright © 2013 - 2022 Niels Lohmann < / div > < / div > < div class = md-social > < a href = https://github.com/nlohmann target = _blank rel = noopener title = github.com class = md-social__link > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 496 512" > <!-- Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --> < path d = "M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z" / > < / svg > < / a > < a href = https://twitter.com/nlohmann target = _blank rel = noopener title = twitter.com class = md-social__link > < svg xmlns = http://www.w3.org/2000/svg viewbox = "0 0 512 512" > <!-- Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. -