You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串式YAML本地化内容转为嵌套JSON对象(PHP/JS优先)

刚好我之前处理过类似的本地化格式转换需求,这就给你分享PHP和JavaScript两种实现方案,完美解决点分隔键转嵌套JSON的问题!

JavaScript实现方案

首先我们需要一个核心函数,把扁平的键值对(YAML解析后的结果)转换成嵌套结构:

function flattenToNested(obj) {
  const result = {};
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      // 把点分隔的键拆分成层级数组
      const keys = key.split('.');
      let current = result;
      for (let i = 0; i < keys.length; i++) {
        const segment = keys[i];
        // 如果是最后一层,直接赋值
        if (i === keys.length - 1) {
          current[segment] = obj[key];
        } else {
          // 不存在的层级就创建空对象
          current[segment] = current[segment] || {};
          current = current[segment];
        }
      }
    }
  }
  return result;
}

示例使用(含文件读写)

如果需要直接处理YAML文件,可以借助js-yaml库解析(先通过npm install js-yaml安装):

const yaml = require('js-yaml');
const fs = require('fs');

// 读取YAML本地化文件
const yamlContent = fs.readFileSync('your-locale-file.yaml', 'utf8');
// 解析成扁平键值对对象
const flatLocale = yaml.load(yamlContent);
// 转换为嵌套结构
const nestedLocale = flattenToNested(flatLocale);
// 写入格式化后的JSON文件
fs.writeFileSync('your-target-file.json', JSON.stringify(nestedLocale, null, 2));

PHP实现方案

PHP版本的核心逻辑和JS一致,利用引用变量来逐层构建嵌套数组:

function flattenToNested(array $flatArray) {
    $nestedArray = [];
    
    foreach ($flatArray as $key => $value) {
        // 拆分键的层级
        $segments = explode('.', $key);
        $current = &$nestedArray;
        
        foreach ($segments as $index => $segment) {
            if ($index === count($segments) - 1) {
                // 最后一层赋值
                $current[$segment] = $value;
            } else {
                // 不存在的层级创建空数组
                if (!isset($current[$segment]) || !is_array($current[$segment])) {
                    $current[$segment] = [];
                }
                $current = &$current[$segment];
            }
        }
        unset($current); // 释放引用,避免后续循环干扰
    }
    
    return $nestedArray;
}

示例使用(含文件读写)

如果需要直接处理YAML文件,可以使用Symfony的YAML组件(先通过composer require symfony/yaml安装):

require 'vendor/autoload.php';

use Symfony\Component\Yaml\Yaml;

// 读取YAML文件
$yamlContent = file_get_contents('your-locale-file.yaml');
// 解析为扁平关联数组
$flatLocale = Yaml::parse($yamlContent);
// 转换为嵌套结构
$nestedLocale = flattenToNested($flatLocale);
// 写入格式化的JSON文件
file_put_contents('your-target-file.json', json_encode($nestedLocale, JSON_PRETTY_PRINT));

这两个方案都能高效处理2万条数据的转换,7种语言的文件可以批量循环处理即可,完全替代手动操作!

内容的提问来源于stack exchange,提问作者Giesburts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:58:02