';
}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 系统