YAML与JSON互转

在线 YAML 与 JSON 互转工具:配置文件一键互转,支持嵌套 map、list、标量、行内数组与字典,Docker/K8s/CI 配置调试必备。

转换结果将显示在这里。
'; }catch(e){ o.innerHTML='转换失败:'+esc(e.message)+'

YAML 支持:2 空格缩进、- 列表、key: value、引号字符串、行内 [a,b]/{a:1}。暂不支持锚点与多行块。

'; } }; function yamlParse(src){ var lines=src.split(/\r?\n/); var idx=0; function indentOf(line){ var m=line.match(/^ */); return m?m[0].length:0; } function parseBlock(indent){ var obj={}; var list=null; while(idx'){ obj[key]=parseBlock(ind+2); } else { obj[key]=parseScalar(val); } } if(list) return list; return obj; } function parseInlineMapInto(obj,key,val,indent){ key=key.trim(); if(val===''){ obj[key]=parseBlock(indent); } else { obj[key]=parseScalar(val); } } function parseScalar(v){ v=v.trim(); if(v.indexOf('#')===0) v=''; if(v==='null'||v==='~') return null; if(v==='true') return true; if(v==='false') return false; if(/^[+-]?\d+$/.test(v)) return parseInt(v,10); if(/^[+-]?\d+\.\d+$/.test(v)) return parseFloat(v); if(/^\[.*\]$/.test(v)){ return v.slice(1,-1).split(',').map(function(x){return parseScalar(x.trim());}); } if(/^\{.*\}$/.test(v)){ var o={}; var body=v.slice(1,-1); if(body.trim()) body.split(',').forEach(function(pair){ var kv=pair.split(':'); if(kv.length>=2) o[kv[0].trim().replace(/^['"]|['"]$/g,'')]=parseScalar(kv.slice(1).join(':').trim()); }); return o; } var q=v.match(/^['"](.*)['"]$/); if(q) return q[1].replace(/\\n/g,'\n').replace(/\\t/g,'\t'); if(v.indexOf(':')>-1&&/^[A-Za-z0-9_\-./:]+$/.test(v)) return v; return v.replace(/^['"]|['"]$/g,''); } return parseBlock(0); } function yamlFromJson(v,indent){ var pad=' '.repeat(indent); if(v===null||v===undefined) return pad+'null'; if(typeof v==='string') return pad+quote(v); if(typeof v==='number'||typeof v==='boolean') return pad+String(v); if(Array.isArray(v)){ if(!v.length) return pad+'[]'; var lines=v.map(function(item){ if(item&&typeof item==='object'){ var inner=yamlFromJson(item,indent+2).trim(); var innerLines=inner.split('\n'); return pad+'- '+innerLines[0]+(innerLines.length>1?'\n'+innerLines.slice(1).join('\n'):''); } return pad+'- '+yamlFromJson(item,0).trim(); }); return lines.join('\n'); } var keys=Object.keys(v); if(!keys.length) return pad+'{}'; var out=[]; keys.forEach(function(k){ var val=v[k]; if(val&&typeof val==='object'){ if(Array.isArray(val)&&!val.length){ out.push(pad+k+': []'); return; } if(!Array.isArray(val)&&Object.keys(val).length===0){ out.push(pad+k+': {}'); return; } var first=yamlFromJson(val,indent+2).trim(); var fl=first.split('\n'); out.push(pad+k+': '+fl[0]+(fl.length>1?'\n'+fl.slice(1).join('\n'):'')); }else{ out.push(pad+k+': '+yamlFromJson(val,0).trim()); } }); return out.join('\n'); } function quote(s){ if(/^[A-Za-z0-9_\-./: \u4e00-\u9fa5]+$/.test(s)&&!/^\d+$/.test(s)&&!/^(true|false|null)$/.test(s)) return s; return JSON.stringify(s); } })();

YAML与JSON互转 使用说明

粘贴 YAML 或 JSON 内容,自动识别方向转换;YAML 支持 2 空格缩进、- 列表、key: value 与行内 [a,b]/{a:1} 语法。

YAML与JSON互转 常见问题

YAML 和 JSON 有什么区别?

YAML 用缩进表达层级、可读性更好,常用于配置文件;JSON 是标准数据交换格式。两者可无损互转。

支持锚点和多行块吗?

暂不支持锚点(&a/\*a)与多行块(| >),复杂 YAML 建议使用专业解析器。

转换后顺序会变吗?

JSON 对象键顺序在 JSON→YAML 时保留;YAML→JSON 按输入顺序输出,与 JS 对象键顺序一致。

相关工具推荐

用蜂词GEO 把品牌做进 AI 的答案里

源自秒词邦真实业务实践的企业 GEO 系统:八大 AI 平台真实可见度诊断、关键词中心(Top10 性价比长尾词 + 主攻词锁定)、长文 / 笔记 / 纯图 / 视频内容工厂、一键多平台发布,以及「目标倒推 · 自动规制 · 主动轮询 · 真实信源」四大自动化引擎。注册即可体验,正式使用按付费方案开通,仅 AI 算力按量计费。

立即开始 AI 可见度诊断进入 GEO 系统