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

如何使用Python将多份C++文件中的结构体转换为JSON字符串?

Convert C++ Struct Definitions to JSON in Python

Absolutely! You can totally convert C++ struct definitions (like the Person example you shared) into JSON strings using Python. The approach depends on how complex your structs are—let’s break down two practical methods:

Method 1: Manual Parsing (For Simple, Consistent Structs)

If your structs follow a predictable, basic format (no nested structs, pointers, or weird edge cases), you can use regular expressions to extract the struct details, map them to a Python dictionary, then convert that dict to JSON.

Example Code

First, let’s use your sample C++ code as input:

#include <iostream> 
using namespace std; 
struct Person { 
    char name[50]; 
    int age; 
    float salary; 
};

Here’s a Python script to parse this and output JSON:

import re
import json

def parse_simple_cpp_struct(file_path):
    with open(file_path, 'r') as f:
        content = f.read()
    
    # Match struct name and its members
    struct_match = re.search(r'struct (\w+)\s*{([^}]+)}', content, re.DOTALL)
    if not struct_match:
        return None
    
    struct_name = struct_match.group(1)
    members_raw = struct_match.group(2).strip().split('\n')
    
    struct_data = {
        "struct_name": struct_name,
        "members": []
    }
    
    for member in members_raw:
        member = member.strip()
        if not member or member.endswith(';'):
            member = member[:-1].strip()
        # Split type and name (handle arrays like char name[50])
        type_part, name_part = re.split(r'\s+', member, maxsplit=1)
        # Clean up array notation
        name_part = re.sub(r'\[\d+\]', '', name_part)
        struct_data["members"].append({
            "type": type_part,
            "name": name_part
        })
    
    return json.dumps(struct_data, indent=4)

# Usage
print(parse_simple_cpp_struct("your_struct_file.cpp"))

Output JSON

This will give you a structured JSON description of the struct:

{
    "struct_name": "Person",
    "members": [
        {
            "type": "char",
            "name": "name"
        },
        {
            "type": "int",
            "name": "age"
        },
        {
            "type": "float",
            "name": "salary"
        }
    ]
}

Method 2: Use a Parser Library (For Robust, Complex Structs)

If you have more complex C++ structs (nested structs, pointers, comments, or C++-specific syntax), manual regex will fall apart. Instead, use pycparser—a pure-Python C parser that handles most common C (and simple C++) code seamlessly.

Step 1: Install pycparser

pip install pycparser

Step 2: Example Code

Note: pycparser is a C parser, so we’ll first strip out C++-specific lines like using namespace std;:

import json
from pycparser import c_parser, c_ast

def parse_cpp_struct_with_pycparser(file_path):
    # Preprocess to remove C++ specific lines
    with open(file_path, 'r') as f:
        lines = f.readlines()
    cleaned_content = ''.join([line for line in lines if not line.startswith('using namespace')])
    
    # Parse the cleaned C code
    parser = c_parser.CParser()
    ast = parser.parse(cleaned_content)
    
    struct_data = {}
    # Traverse the AST to find struct definitions
    for ext in ast.ext:
        if isinstance(ext, c_ast.Decl) and isinstance(ext.type, c_ast.Struct):
            struct_name = ext.name
            members = []
            for decl in ext.type.decls:
                # Handle array types (like char name[50])
                if isinstance(decl.type, c_ast.ArrayDecl):
                    member_type = decl.type.type.names[0]
                else:
                    member_type = decl.type.names[0]
                member_name = decl.name
                members.append({"type": member_type, "name": member_name})
            struct_data[struct_name] = members
    
    return json.dumps(struct_data, indent=4)

# Usage
print(parse_cpp_struct_with_pycparser("your_struct_file.cpp"))

Key Notes

  • This method handles nested structs, arrays, and basic C++ syntax (after preprocessing) far better than manual regex.
  • For full C++ support (like templates), you’d need a more heavyweight tool, but pycparser works great for most common struct definitions.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:26:22