怎样实现JSON格式化脚本

wen 实用脚本 26

本文目录导读:

怎样实现JSON格式化脚本

  1. 纯Python实现(最常用)
  2. 命令行脚本(Python)
  3. 利用内置 json.tool 模块
  4. 浏览器中的JavaScript实现
  5. 完整的命令行工具(Python)
  6. 在线格式化的完整HTML页面
  7. 使用建议

纯Python实现(最常用)

简单的格式化函数

import json
def format_json(data):
    """格式化JSON数据"""
    try:
        # 如果是字符串,先解析
        if isinstance(data, str):
            parsed = json.loads(data)
        else:
            parsed = data
        # 格式化输出(缩进4个空格)
        return json.dumps(parsed, indent=4, ensure_ascii=False)
    except json.JSONDecodeError as e:
        return f"JSON解析错误: {e}"
# 使用示例
json_string = '{"name":"张三","age":30,"city":"北京"}'
formatted = format_json(json_string)
print(formatted)

带排序和中文处理的增强版

import json
from datetime import datetime
def format_json_advanced(data, sort_keys=False, indent=4):
    """高级JSON格式化"""
    try:
        if isinstance(data, str):
            parsed = json.loads(data)
        else:
            parsed = data
        return json.dumps(
            parsed,
            indent=indent,
            sort_keys=sort_keys,
            ensure_ascii=False,  # 支持中文
            separators=(',', ': ')  # 美化分隔符
        )
    except Exception as e:
        return f"格式化失败: {e}"

命令行脚本(Python)

创建 json_formatter.py

#!/usr/bin/env python3
import sys
import json
def main():
    if len(sys.argv) < 2:
        print("用法: python json_formatter.py <输入文件> [输出文件]")
        print("或: echo '{\"key\":\"value\"}' | python json_formatter.py")
        sys.exit(1)
    # 从文件或标准输入读取
    if sys.argv[1] == '-':
        data = sys.stdin.read()
    else:
        with open(sys.argv[1], 'r', encoding='utf-8') as f:
            data = f.read()
    try:
        parsed = json.loads(data)
        formatted = json.dumps(parsed, indent=4, ensure_ascii=False)
        # 输出到文件或标准输出
        if len(sys.argv) >= 3 and sys.argv[2] != '-':
            with open(sys.argv[2], 'w', encoding='utf-8') as f:
                f.write(formatted)
            print(f"已保存到 {sys.argv[2]}")
        else:
            print(formatted)
    except json.JSONDecodeError as e:
        print(f"JSON解析错误: {e}", file=sys.stderr)
        sys.exit(1)
if __name__ == "__main__":
    main()

利用内置 json.tool 模块

Python自带JSON工具,无需安装:

# 格式化文件
python -m json.tool input.json > formatted.json
# 管道输入
echo '{"name":"张三","age":30}' | python -m json.tool
# 保持中文
echo '{"name":"张三"}' | python -c "import sys,json; json.dump(json.load(sys.stdin), sys.stdout, indent=2, ensure_ascii=False)"

浏览器中的JavaScript实现

// 简单的格式化函数
function formatJSON(json) {
    try {
        // 如果是字符串,先解析
        const obj = typeof json === 'string' ? JSON.parse(json) : json;
        // 格式化输出
        return JSON.stringify(obj, null, 2);
    } catch (error) {
        return `JSON格式错误: ${error.message}`;
    }
}
// 带更多选项的版本
function formatJSONAdvanced(json, options = {}) {
    const {
        indent = 2,
        sortKeys = false,
        maxLength = 80
    } = options;
    try {
        const obj = typeof json === 'string' ? JSON.parse(json) : json;
        return JSON.stringify(obj, (key, value) => {
            // 自定义替换逻辑
            return value;
        }, indent);
    } catch (error) {
        return `JSON格式错误: ${error.message}`;
    }
}
// 使用示例
const messyJson = '{"name":"Alice","age":30,"hobbies":["reading","coding"]}';
console.log(formatJSON(messyJson));

完整的命令行工具(Python)

创建 json_tool.py 支持更多功能:

#!/usr/bin/env python3
import json
import sys
import os
def format_data(data, options):
    """格式化JSON数据"""
    try:
        parsed = json.loads(data)
    except json.JSONDecodeError:
        # 尝试修复常见错误
        data = data.strip()
        if data.startswith("'") and data.endswith("'"):
            data = data[1:-1]
        try:
            parsed = json.loads(data)
        except:
            raise ValueError("无法解析JSON")
    return json.dumps(
        parsed,
        indent=options.get('indent', 2),
        sort_keys=options.get('sort', False),
        ensure_ascii=not options.get('chinese', True),
        check_circular=options.get('check', True)
    )
def main():
    import argparse
    parser = argparse.ArgumentParser(description='JSON格式化工具')
    parser.add_argument('input', nargs='?', help='输入文件')
    parser.add_argument('-o', '--output', help='输出文件')
    parser.add_argument('-i', '--indent', type=int, default=2, help='缩进空格数')
    parser.add_argument('-s', '--sort', action='store_true', help='按键排序')
    parser.add_argument('--no-chinese', action='store_true', help='转义中文字符')
    args = parser.parse_args()
    # 读取数据
    if args.input:
        with open(args.input, 'r', encoding='utf-8') as f:
            data = f.read()
    else:
        data = sys.stdin.read()
    # 格式化
    options = {
        'indent': args.indent,
        'sort': args.sort,
        'chinese': not args.no_chinese
    }
    try:
        result = format_data(data, options)
        if args.output:
            with open(args.output, 'w', encoding='utf-8') as f:
                f.write(result)
            print(f"已保存到 {args.output}")
        else:
            print(result)
    except Exception as e:
        print(f"错误: {e}", file=sys.stderr)
        sys.exit(1)
if __name__ == "__main__":
    main()

在线格式化的完整HTML页面

<!DOCTYPE html>
<html>
<head>JSON格式化工具</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        textarea { width: 100%; height: 200px; font-family: monospace; }
        button { padding: 10px 20px; margin: 10px 0; }
        #result { background: #f5f5f5; padding: 10px; border-radius: 5px; }
        .error { color: red; }
    </style>
</head>
<body>
    <h1>JSON格式化工具</h1>
    <textarea id="input" placeholder="粘贴JSON数据..."></textarea>
    <div>
        <button onclick="format()">格式化</button>
        <button onclick="compress()">压缩</button>
        <button onclick="validate()">验证</button>
    </div>
    <textarea id="output" placeholder="结果..." readonly></textarea>
    <script>
        function format() {
            try {
                const input = document.getElementById('input').value;
                const parsed = JSON.parse(input);
                document.getElementById('output').value = 
                    JSON.stringify(parsed, null, 2);
            } catch (e) {
                document.getElementById('output').value = 
                    `错误: ${e.message}`;
            }
        }
        function compress() {
            try {
                const input = document.getElementById('input').value;
                const parsed = JSON.parse(input);
                document.getElementById('output').value = 
                    JSON.stringify(parsed);
            } catch (e) {
                document.getElementById('output').value = 
                    `错误: ${e.message}`;
            }
        }
        function validate() {
            try {
                JSON.parse(document.getElementById('input').value);
                alert('有效的JSON格式!');
            } catch (e) {
                alert(`无效的JSON: ${e.message}`);
            }
        }
    </script>
</body>
</html>

使用建议

  1. 简单使用:直接用 python -m json.tool
  2. 开发集成:使用Python的 json 模块
  3. Web应用:使用浏览器的 JSON.stringify()
  4. 命令行工具:用argparse创建完整工具
  5. 大型文件:支持流式读取和写入

选择哪种方法取决于你的具体需求和使用场景。

抱歉,评论功能暂时关闭!