[{"data":1,"prerenderedAt":1079},["ShallowReactive",2],{"guide-migrating-json-to-yaml":3},{"id":4,"title":5,"body":6,"date":1071,"description":1072,"extension":1073,"meta":1074,"navigation":262,"path":1075,"readingTime":376,"seo":1076,"stem":1077,"__hash__":1078},"guides\u002Fguides\u002Fmigrating-json-to-yaml.md","Migrating JSON Config to YAML: A Step-by-Step Guide",{"type":7,"value":8,"toc":1050},"minimark",[9,14,18,21,50,54,165,169,174,177,188,191,195,201,215,291,297,301,304,412,415,504,508,511,565,569,572,685,736,743,747,775,779,783,786,868,881,885,916,925,929,932,936,939,973,976,980,1009,1013,1034,1038,1046],[10,11,13],"h2",{"id":12},"why-migrate-from-json-to-yaml","Why Migrate from JSON to YAML?",[15,16,17],"p",{},"JSON works fine for machine-to-machine communication, but configuration files written by humans benefit from YAML's readability. YAML supports comments, multi-line strings, and avoids the trailing-comma problem that plagues JSON editing.",[15,19,20],{},"Common motivations for migration:",[22,23,24,32,38,44],"ul",{},[25,26,27,31],"li",{},[28,29,30],"strong",{},"Adding comments"," to explain configuration decisions",[25,33,34,37],{},[28,35,36],{},"Reducing syntax noise"," — no braces or quotes needed for simple values",[25,39,40,43],{},[28,41,42],{},"Using YAML anchors"," to deduplicate repeated configuration blocks",[25,45,46,49],{},[28,47,48],{},"Better multi-line string handling"," for embedded scripts and templates",[10,51,53],{"id":52},"json-vs-yaml-structural-differences","JSON vs. YAML: Structural Differences",[55,56,57,73],"table",{},[58,59,60],"thead",{},[61,62,63,67,70],"tr",{},[64,65,66],"th",{},"Feature",[64,68,69],{},"JSON",[64,71,72],{},"YAML",[74,75,76,91,102,113,127,143,154],"tbody",{},[61,77,78,82,85],{},[79,80,81],"td",{},"Comments",[79,83,84],{},"Not supported",[79,86,87],{},[88,89,90],"code",{},"# line comments",[61,92,93,96,99],{},[79,94,95],{},"Quotes on strings",[79,97,98],{},"Required",[79,100,101],{},"Optional for simple values",[61,103,104,107,110],{},[79,105,106],{},"Trailing commas",[79,108,109],{},"Syntax error",[79,111,112],{},"Not applicable",[61,114,115,118,124],{},[79,116,117],{},"Multi-line strings",[79,119,120,123],{},[88,121,122],{},"\\n"," escapes only",[79,125,126],{},"Literal and folded block styles",[61,128,129,132,134],{},[79,130,131],{},"Anchors\u002Faliases",[79,133,84],{},[79,135,136,139,140],{},[88,137,138],{},"&anchor"," and ",[88,141,142],{},"*alias",[61,144,145,148,151],{},[79,146,147],{},"Data types",[79,149,150],{},"String, number, bool, null, array, object",[79,152,153],{},"Same + date, timestamp, binary, sets",[61,155,156,159,162],{},[79,157,158],{},"Root structure",[79,160,161],{},"Object or array",[79,163,164],{},"Any type (including scalar)",[10,166,168],{"id":167},"step-by-step-migration-process","Step-by-Step Migration Process",[170,171,173],"h3",{"id":172},"step-1-audit-your-json-files","Step 1: Audit Your JSON Files",[15,175,176],{},"Before converting anything, identify every JSON config file and its consumers. Ask:",[22,178,179,182,185],{},[25,180,181],{},"Which applications read this file?",[25,183,184],{},"Do any tools write back to this file automatically?",[25,186,187],{},"Are there JSON schemas that validate these files?",[15,189,190],{},"Applications that both read and write the config may not support YAML output, which blocks full migration.",[170,192,194],{"id":193},"step-2-choose-your-conversion-method","Step 2: Choose Your Conversion Method",[15,196,197,200],{},[28,198,199],{},"Manual conversion",": Open the JSON file, reformat to YAML syntax by hand. Feasible only for small files (under 50 lines).",[15,202,203,206,207,210,211,214],{},[28,204,205],{},"Command-line tools",": Use ",[88,208,209],{},"yq"," or ",[88,212,213],{},"jq"," for automated conversion:",[216,217,222],"pre",{"className":218,"code":219,"language":220,"meta":221,"style":221},"language-bash shiki shiki-themes github-light github-dark","# Using yq (recommended)\nyq -y '.' config.json > config.yaml\n\n# Using jq + python\njq '.' config.json | python3 -c \"import sys, yaml, json; yaml.dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)\"\n","bash","",[88,223,224,233,257,264,270],{"__ignoreMap":221},[225,226,229],"span",{"class":227,"line":228},"line",1,[225,230,232],{"class":231},"sJ8bj","# Using yq (recommended)\n",[225,234,236,239,243,247,250,254],{"class":227,"line":235},2,[225,237,209],{"class":238},"sScJk",[225,240,242],{"class":241},"sj4cs"," -y",[225,244,246],{"class":245},"sZZnC"," '.'",[225,248,249],{"class":245}," config.json",[225,251,253],{"class":252},"szBVR"," >",[225,255,256],{"class":245}," config.yaml\n",[225,258,260],{"class":227,"line":259},3,[225,261,263],{"emptyLinePlaceholder":262},true,"\n",[225,265,267],{"class":227,"line":266},4,[225,268,269],{"class":231},"# Using jq + python\n",[225,271,273,275,277,279,282,285,288],{"class":227,"line":272},5,[225,274,213],{"class":238},[225,276,246],{"class":245},[225,278,249],{"class":245},[225,280,281],{"class":252}," |",[225,283,284],{"class":238}," python3",[225,286,287],{"class":241}," -c",[225,289,290],{"class":245}," \"import sys, yaml, json; yaml.dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)\"\n",[15,292,293,296],{},[28,294,295],{},"Online converters",": Paste JSON, get YAML. Quick for one-off conversions but not suitable for sensitive configs.",[170,298,300],{"id":299},"step-3-convert-the-syntax","Step 3: Convert the Syntax",[15,302,303],{},"Key transformations to apply:",[216,305,309],{"className":306,"code":307,"language":308,"meta":221,"style":221},"language-json shiki shiki-themes github-light github-dark","{\n  \"database\": {\n    \"host\": \"localhost\",\n    \"port\": 5432,\n    \"name\": \"myapp_production\",\n    \"ssl\": true\n  },\n  \"features\": [\"auth\", \"logging\", \"metrics\"]\n}\n","json",[88,310,311,317,325,339,351,363,374,380,406],{"__ignoreMap":221},[225,312,313],{"class":227,"line":228},[225,314,316],{"class":315},"sVt8B","{\n",[225,318,319,322],{"class":227,"line":235},[225,320,321],{"class":241},"  \"database\"",[225,323,324],{"class":315},": {\n",[225,326,327,330,333,336],{"class":227,"line":259},[225,328,329],{"class":241},"    \"host\"",[225,331,332],{"class":315},": ",[225,334,335],{"class":245},"\"localhost\"",[225,337,338],{"class":315},",\n",[225,340,341,344,346,349],{"class":227,"line":266},[225,342,343],{"class":241},"    \"port\"",[225,345,332],{"class":315},[225,347,348],{"class":241},"5432",[225,350,338],{"class":315},[225,352,353,356,358,361],{"class":227,"line":272},[225,354,355],{"class":241},"    \"name\"",[225,357,332],{"class":315},[225,359,360],{"class":245},"\"myapp_production\"",[225,362,338],{"class":315},[225,364,366,369,371],{"class":227,"line":365},6,[225,367,368],{"class":241},"    \"ssl\"",[225,370,332],{"class":315},[225,372,373],{"class":241},"true\n",[225,375,377],{"class":227,"line":376},7,[225,378,379],{"class":315},"  },\n",[225,381,383,386,389,392,395,398,400,403],{"class":227,"line":382},8,[225,384,385],{"class":241},"  \"features\"",[225,387,388],{"class":315},": [",[225,390,391],{"class":245},"\"auth\"",[225,393,394],{"class":315},", ",[225,396,397],{"class":245},"\"logging\"",[225,399,394],{"class":315},[225,401,402],{"class":245},"\"metrics\"",[225,404,405],{"class":315},"]\n",[225,407,409],{"class":227,"line":408},9,[225,410,411],{"class":315},"}\n",[15,413,414],{},"Becomes:",[216,416,420],{"className":417,"code":418,"language":419,"meta":221,"style":221},"language-yaml shiki shiki-themes github-light github-dark","database:\n  host: localhost\n  port: 5432\n  name: myapp_production\n  ssl: true\n\nfeatures:\n  - auth\n  - logging\n  - metrics\n","yaml",[88,421,422,431,441,451,461,470,474,481,489,496],{"__ignoreMap":221},[225,423,424,428],{"class":227,"line":228},[225,425,427],{"class":426},"s9eBZ","database",[225,429,430],{"class":315},":\n",[225,432,433,436,438],{"class":227,"line":235},[225,434,435],{"class":426},"  host",[225,437,332],{"class":315},[225,439,440],{"class":245},"localhost\n",[225,442,443,446,448],{"class":227,"line":259},[225,444,445],{"class":426},"  port",[225,447,332],{"class":315},[225,449,450],{"class":241},"5432\n",[225,452,453,456,458],{"class":227,"line":266},[225,454,455],{"class":426},"  name",[225,457,332],{"class":315},[225,459,460],{"class":245},"myapp_production\n",[225,462,463,466,468],{"class":227,"line":272},[225,464,465],{"class":426},"  ssl",[225,467,332],{"class":315},[225,469,373],{"class":241},[225,471,472],{"class":227,"line":365},[225,473,263],{"emptyLinePlaceholder":262},[225,475,476,479],{"class":227,"line":376},[225,477,478],{"class":426},"features",[225,480,430],{"class":315},[225,482,483,486],{"class":227,"line":382},[225,484,485],{"class":315},"  - ",[225,487,488],{"class":245},"auth\n",[225,490,491,493],{"class":227,"line":408},[225,492,485],{"class":315},[225,494,495],{"class":245},"logging\n",[225,497,499,501],{"class":227,"line":498},10,[225,500,485],{"class":315},[225,502,503],{"class":245},"metrics\n",[170,505,507],{"id":506},"step-4-add-comments-and-documentation","Step 4: Add Comments and Documentation",[15,509,510],{},"Now that YAML supports comments, annotate non-obvious values:",[216,512,514],{"className":417,"code":513,"language":419,"meta":221,"style":221},"database:\n  host: localhost          # Override with DB_HOST env var in production\n  port: 5432               # Default PostgreSQL port\n  name: myapp_production\n  ssl: true                # Required for RDS instances\n",[88,515,516,522,534,545,553],{"__ignoreMap":221},[225,517,518,520],{"class":227,"line":228},[225,519,427],{"class":426},[225,521,430],{"class":315},[225,523,524,526,528,531],{"class":227,"line":235},[225,525,435],{"class":426},[225,527,332],{"class":315},[225,529,530],{"class":245},"localhost",[225,532,533],{"class":231},"          # Override with DB_HOST env var in production\n",[225,535,536,538,540,542],{"class":227,"line":259},[225,537,445],{"class":426},[225,539,332],{"class":315},[225,541,348],{"class":241},[225,543,544],{"class":231},"               # Default PostgreSQL port\n",[225,546,547,549,551],{"class":227,"line":266},[225,548,455],{"class":426},[225,550,332],{"class":315},[225,552,460],{"class":245},[225,554,555,557,559,562],{"class":227,"line":272},[225,556,465],{"class":426},[225,558,332],{"class":315},[225,560,561],{"class":241},"true",[225,563,564],{"class":231},"                # Required for RDS instances\n",[170,566,568],{"id":567},"step-5-update-application-code","Step 5: Update Application Code",[15,570,571],{},"Modify your application to read YAML instead of JSON:",[216,573,577],{"className":574,"code":575,"language":576,"meta":221,"style":221},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F Node.js: Before\nconst config = require('.\u002Fconfig.json')\n\n\u002F\u002F Node.js: After (using js-yaml)\nconst fs = require('fs')\nconst yaml = require('js-yaml')\nconst config = yaml.load(fs.readFileSync('.\u002Fconfig.yaml', 'utf8'))\n","javascript",[88,578,579,584,607,611,616,634,652],{"__ignoreMap":221},[225,580,581],{"class":227,"line":228},[225,582,583],{"class":231},"\u002F\u002F Node.js: Before\n",[225,585,586,589,592,595,598,601,604],{"class":227,"line":235},[225,587,588],{"class":252},"const",[225,590,591],{"class":241}," config",[225,593,594],{"class":252}," =",[225,596,597],{"class":238}," require",[225,599,600],{"class":315},"(",[225,602,603],{"class":245},"'.\u002Fconfig.json'",[225,605,606],{"class":315},")\n",[225,608,609],{"class":227,"line":259},[225,610,263],{"emptyLinePlaceholder":262},[225,612,613],{"class":227,"line":266},[225,614,615],{"class":231},"\u002F\u002F Node.js: After (using js-yaml)\n",[225,617,618,620,623,625,627,629,632],{"class":227,"line":272},[225,619,588],{"class":252},[225,621,622],{"class":241}," fs",[225,624,594],{"class":252},[225,626,597],{"class":238},[225,628,600],{"class":315},[225,630,631],{"class":245},"'fs'",[225,633,606],{"class":315},[225,635,636,638,641,643,645,647,650],{"class":227,"line":365},[225,637,588],{"class":252},[225,639,640],{"class":241}," yaml",[225,642,594],{"class":252},[225,644,597],{"class":238},[225,646,600],{"class":315},[225,648,649],{"class":245},"'js-yaml'",[225,651,606],{"class":315},[225,653,654,656,658,660,663,666,669,672,674,677,679,682],{"class":227,"line":376},[225,655,588],{"class":252},[225,657,591],{"class":241},[225,659,594],{"class":252},[225,661,662],{"class":315}," yaml.",[225,664,665],{"class":238},"load",[225,667,668],{"class":315},"(fs.",[225,670,671],{"class":238},"readFileSync",[225,673,600],{"class":315},[225,675,676],{"class":245},"'.\u002Fconfig.yaml'",[225,678,394],{"class":315},[225,680,681],{"class":245},"'utf8'",[225,683,684],{"class":315},"))\n",[216,686,690],{"className":687,"code":688,"language":689,"meta":221,"style":221},"language-python shiki shiki-themes github-light github-dark","# Python: Before\nimport json\nwith open('config.json') as f:\n    config = json.load(f)\n\n# Python: After\nimport yaml\nwith open('config.yaml') as f:\n    config = yaml.safe_load(f)\n","python",[88,691,692,697,702,707,712,716,721,726,731],{"__ignoreMap":221},[225,693,694],{"class":227,"line":228},[225,695,696],{},"# Python: Before\n",[225,698,699],{"class":227,"line":235},[225,700,701],{},"import json\n",[225,703,704],{"class":227,"line":259},[225,705,706],{},"with open('config.json') as f:\n",[225,708,709],{"class":227,"line":266},[225,710,711],{},"    config = json.load(f)\n",[225,713,714],{"class":227,"line":272},[225,715,263],{"emptyLinePlaceholder":262},[225,717,718],{"class":227,"line":365},[225,719,720],{},"# Python: After\n",[225,722,723],{"class":227,"line":376},[225,724,725],{},"import yaml\n",[225,727,728],{"class":227,"line":382},[225,729,730],{},"with open('config.yaml') as f:\n",[225,732,733],{"class":227,"line":408},[225,734,735],{},"    config = yaml.safe_load(f)\n",[15,737,738,739,742],{},"Always use ",[88,740,741],{},"safe_load"," in Python to avoid executing arbitrary YAML tags.",[170,744,746],{"id":745},"step-6-validate-and-test","Step 6: Validate and Test",[22,748,749,752,755,772],{},[25,750,751],{},"Run your test suite against the new YAML config",[25,753,754],{},"Verify that all values parsed correctly — YAML's type coercion can surprise you",[25,756,757,758,760,761,764,765,760,768,771],{},"Check that boolean values are correct (",[88,759,561],{},"\u002F",[88,762,763],{},"false",", not ",[88,766,767],{},"\"true\"",[88,769,770],{},"\"false\"",")",[25,773,774],{},"Confirm numeric strings haven't been converted to numbers unexpectedly",[10,776,778],{"id":777},"common-yaml-parsing-surprises","Common YAML Parsing Surprises",[170,780,782],{"id":781},"boolean-coercion","Boolean Coercion",[15,784,785],{},"YAML treats several values as booleans:",[55,787,788,798],{},[58,789,790],{},[61,791,792,795],{},[64,793,794],{},"YAML Value",[64,796,797],{},"Parsed As",[74,799,800,834],{},[61,801,802,830],{},[79,803,804,394,806,394,809,394,812,394,815,394,818,394,821,394,824,394,827],{},[88,805,561],{},[88,807,808],{},"True",[88,810,811],{},"TRUE",[88,813,814],{},"yes",[88,816,817],{},"Yes",[88,819,820],{},"YES",[88,822,823],{},"on",[88,825,826],{},"On",[88,828,829],{},"ON",[79,831,832],{},[88,833,561],{},[61,835,836,864],{},[79,837,838,394,840,394,843,394,846,394,849,394,852,394,855,394,858,394,861],{},[88,839,763],{},[88,841,842],{},"False",[88,844,845],{},"FALSE",[88,847,848],{},"no",[88,850,851],{},"No",[88,853,854],{},"NO",[88,856,857],{},"off",[88,859,860],{},"Off",[88,862,863],{},"OFF",[79,865,866],{},[88,867,763],{},[15,869,870,871,873,874,876,877,880],{},"If you have a country code ",[88,872,854],{}," (Norway), YAML parses it as ",[88,875,763],{},". Quote it: ",[88,878,879],{},"\"NO\"",".",[170,882,884],{"id":883},"numeric-strings","Numeric Strings",[216,886,888],{"className":417,"code":887,"language":419,"meta":221,"style":221},"version: 1.10    # Parsed as float 1.1, not string \"1.10\"\nport: 08080      # Parsed as 8080 octal → 4160 decimal\n",[88,889,890,903],{"__ignoreMap":221},[225,891,892,895,897,900],{"class":227,"line":228},[225,893,894],{"class":426},"version",[225,896,332],{"class":315},[225,898,899],{"class":241},"1.10",[225,901,902],{"class":231},"    # Parsed as float 1.1, not string \"1.10\"\n",[225,904,905,908,910,913],{"class":227,"line":235},[225,906,907],{"class":426},"port",[225,909,332],{"class":315},[225,911,912],{"class":245},"08080",[225,914,915],{"class":231},"      # Parsed as 8080 octal → 4160 decimal\n",[15,917,918,919,394,922,880],{},"Quote values that must remain strings: ",[88,920,921],{},"version: \"1.10\"",[88,923,924],{},"port: \"08080\"",[170,926,928],{"id":927},"indentation-errors","Indentation Errors",[15,930,931],{},"YAML is indentation-sensitive. Mixing tabs and spaces breaks parsing. Configure your editor to use spaces only.",[10,933,935],{"id":934},"partial-migration-strategy","Partial Migration Strategy",[15,937,938],{},"If some consumers can't read YAML, run both formats in parallel:",[940,941,942,945,970],"ol",{},[25,943,944],{},"Maintain YAML as the source of truth",[25,946,947,948],{},"Generate JSON from YAML in your build step:\n",[216,949,951],{"className":218,"code":950,"language":220,"meta":221,"style":221},"yq -j '.' config.yaml > config.json\n",[88,952,953],{"__ignoreMap":221},[225,954,955,957,960,962,965,967],{"class":227,"line":228},[225,956,209],{"class":238},[225,958,959],{"class":241}," -j",[225,961,246],{"class":245},[225,963,964],{"class":245}," config.yaml",[225,966,253],{"class":252},[225,968,969],{"class":245}," config.json\n",[25,971,972],{},"Commit only the YAML file; git-ignore the generated JSON",[15,974,975],{},"This keeps your canonical config in readable YAML while supporting legacy consumers.",[10,977,979],{"id":978},"key-takeaways","Key Takeaways",[22,981,982,985,988,998,1001,1006],{},[25,983,984],{},"YAML adds comments, cleaner syntax, and anchors — worthwhile for human-authored configs",[25,986,987],{},"Audit all consumers before migrating; some tools may not support YAML output",[25,989,990,991,993,994,997],{},"Use ",[88,992,209],{}," for automated conversion or Python's ",[88,995,996],{},"yaml.dump"," for programmatic conversion",[25,999,1000],{},"Watch for YAML's aggressive type coercion: quote strings that look like booleans or numbers",[25,1002,738,1003,1005],{},[88,1004,741],{}," (Python) or equivalent to avoid executing arbitrary YAML tags",[25,1007,1008],{},"For partial migrations, generate JSON from YAML in your build step",[10,1010,1012],{"id":1011},"related-guides","Related Guides",[22,1014,1015,1022,1028],{},[25,1016,1017],{},[1018,1019,1021],"a",{"href":1020},"\u002Fguides\u002Fjson-vs-yaml","JSON vs YAML",[25,1023,1024],{},[1018,1025,1027],{"href":1026},"\u002Fguides\u002Fyaml-syntax-guide","YAML Syntax Guide",[25,1029,1030],{},[1018,1031,1033],{"href":1032},"\u002Fguides\u002Fconfiguration-file-formats","Configuration File Formats",[10,1035,1037],{"id":1036},"try-it-yourself","Try It Yourself",[15,1039,1040,1041,1045],{},"Convert JSON to YAML (and back) instantly with our free ",[1018,1042,1044],{"href":1043},"\u002Ftools\u002Fjson-yaml","JSON-YAML Converter",". Paste your data and switch formats in one click — no installation required.",[1047,1048,1049],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":221,"searchDepth":235,"depth":235,"links":1051},[1052,1053,1054,1062,1067,1068,1069,1070],{"id":12,"depth":235,"text":13},{"id":52,"depth":235,"text":53},{"id":167,"depth":235,"text":168,"children":1055},[1056,1057,1058,1059,1060,1061],{"id":172,"depth":259,"text":173},{"id":193,"depth":259,"text":194},{"id":299,"depth":259,"text":300},{"id":506,"depth":259,"text":507},{"id":567,"depth":259,"text":568},{"id":745,"depth":259,"text":746},{"id":777,"depth":235,"text":778,"children":1063},[1064,1065,1066],{"id":781,"depth":259,"text":782},{"id":883,"depth":259,"text":884},{"id":927,"depth":259,"text":928},{"id":934,"depth":235,"text":935},{"id":978,"depth":235,"text":979},{"id":1011,"depth":235,"text":1012},{"id":1036,"depth":235,"text":1037},"2026-05-28","Learn how to migrate configuration files from JSON to YAML — conversion strategies, tooling, and pitfalls to avoid during the transition.","md",{"immutable":262},"\u002Fguides\u002Fmigrating-json-to-yaml",{"title":5,"description":1072},"guides\u002Fmigrating-json-to-yaml","IxTiDDAZGXuAc9VPzjexUXwKMtu_knGDu30B7w29fUQ",1780401335366]