2014-09-22 3 views
0

У меня есть json-файл, но я хочу преобразовать его в файл .strings для интернационализации в iOS.JSON to iOS strings file

Итак, я хочу, чтобы перейти от:

{"a": {"one": "b"}, 
"c" : {"title": "cool", "challenge": {"win": "score", "lose":"don't score"}} 
} 

В чем-то вроде:

"a.one" = "b" 
"c.title" = "cool" 
"c.challenge.win" = "score" 
"c.challenge.lose" = "don't score" 

Мысли я хотел бы видеть, если это что-то встраиваемое, кажется, что это может быть обычной функцией.

Спасибо.

ответ

1

Там нет ничего я не знаю в модуле JSON, что делает что-то вроде этого, но учитывая JSON данные его в основном словарь, его довольно легко сделать это вручную

def to_listing(json_item, parent=None): 
    listing = [] 
    prefix = parent + '.' if parent else '' 

    for key in json_item.keys(): 
     if isinstance(json_item[key], basestring): 
      listing.append('"{}" = "{}"'.format(prefix+key,json_item[key])) 
     else: 
      listing.extend(to_listing(json_item[key], prefix+key)) 
    return listing 

In [117]: a = json.loads('{"a": {"one": "b"},"c" : {"title": "cool", "challenge": {"win": "score", "lose":"don\'t score"}}}') 

In [118]: to_listing(a) 
Out[118]: 
['"a.one" = "b"', 
'"c.challenge.win" = "score"', 
'"c.challenge.lose" = "don\'t score"', 
'"c.title" = "cool"'] 
1

Я полагаю, вы хотите, чтобы сгладить Словарь?

(адаптировано из https://stackoverflow.com/a/6027615/3622606)

import collections 

def flatten(d, parent_key='', sep='.'): 
    items = [] 
    for k, v in d.items(): 
    new_key = parent_key + sep + k if parent_key else k 
    if isinstance(v, collections.MutableMapping): 
     items.extend(flatten(v, new_key).items()) 
    else: 
     items.append((new_key, v)) 
    return dict(items) 

dictionary = {"a": {"one": "b"}, "c" : {"title": "cool", "challenge": {"win": "score",  "lose":"don't score"}}} 

flattened_dict = flatten(dictionary) 

# Returns the below dict... 
# {"a.one": "b", "c.title": "cool", "c.challenge.win": "score", "c.challenge.lose": "don't score"} 
# And now print them out... 

for value in flattened_dict: 
    print '"%s" = "%s"' % (value, flattened_dict[value]) 

# "c.challenge.win" = "score" 
# "c.title" = "cool" 
# "a.one" = "b" 
# "c.challenge.lose" = "don't score" 
+0

Именно то, что я хотел, спасибо! Передал это другому подателю, как они представили первый! – Jonovono