0

いくつかの構成ファイルがあり、データ形式を変更できません。

それらの1つは次のようになります。

root {
  configuration {
    field_a: "aaaa"
    field_b: "bbbb"
  }
  child {
    configuration {
        field_a: "aaa1"
        field_b: "bbb1"
    }
  }
  child {
    configuration {
        field_a: "aaa2"
        field_b: "bbb2"
    }
  }
}

必要なのは、ファイルを解析して JSON オブジェクトとして保存することです。

{root: 
    {field_a:"aaaa",field_b:"bbbb"},
    children: [{field_a:"aaa", field_b:"bbb"}, ... ]
}

それを可能にする方法はありますか?

4

2 に答える 2

1

簡単な考え:

構成が例のように適切にインデントされ、並んでいる場合:

「{」と「}」を次のように置き換えます。

root:
  configuration:
    field_a: "aaaa"
    field_b: "bbbb"
  child:
    configuration:
        field_a: "aaa"
        field_b: "bbb"

そして今、それはyaml形式のファイルです! ぜひyamlからjsonに変換するだけ!

import yaml
import json

s = "yamlstr"  # your yaml str
data = yaml.load(s)
jsondata = json.dumps(data)
print jsondata

アップデート

child はリストであり、「root」、「configuration」、および「child」の両方がキーワードのように見えるため、少し変更して回避策に進みます。

これを実現します:

root:
  - configuration:
    field_a: "aaaa"
    field_b: "bbbb"
  - child:
    - configuration:
        field_a: "aaa1"
        field_b: "bbb1"
  - child:
    - configuration:
        field_a: "aaa2"
        field_b: "bbb2"

出力 python dict は次のようになります。

{'root': [{'configuration': None, 'field_b': 'bbbb', 'field_a': 'aaaa'}, {'child': [{'configuration': {'field_b': 'bbb1', 'field_a': 'aaa1'}}]}, {'child': [{'configuration': {'field_b': 'bbb2', 'field_a': 'aaa2'}}]}]}

簡単なプログラミングを行い、それをあなたの構造にします:-)

于 2012-12-05T08:36:56.527 に答える
1

データ形式は unofficial-javascript-array です。優れた python の場合、4 行のコードでそれらを python dict に解析するのは簡単です。次に、simplejson を使用して、好きな json 形式に解析します。

s = '''                                                                                                          
root {                                                                                                           
  configuration {                                                                                                
    field_a: "aaaa"                                                                                              
    field_b: "bbbb"                                                                                              
  }                                                                                                              
  child {                                                                                                        
    configuration {                                                                                              
        field_a: "aaa"                                                                                           
        field_b: "bbb"                                                                                           
    }                                                                                                            
  }                                                                                                              
}                                                                                                                
'''                                                                                                              

s = s.replace("{", ":{").replace("}", "},")                                                                      
s = "{%s}"%s                                                                                                     

import re                                                                                                        
s = re.sub(r'(\w+)"', r'\1",', s)                                                                                
s = re.sub(r"(\w+)\s*\:", r'"\1":', s)                                                                           
print "string:", s                                                                                               

d = eval(s)                                                                                                      
print "python dict:", d                                                                                          

import simplejson as json                                                                                        
print "json:", json.dumps(d) 
于 2012-12-05T07:46:33.993 に答える