2017-02-17 1 views
0

Когда я пишу Python, я хотел бы сделать это:Есть ли какой-нибудь lib, который может облегчить ОПЕРАЦИИ JSON в golang?

d = {"apple": "red", "book":["history", "art", "science"]} 
print json.JSONEncoder().encode(d) 

тогда я получаю строку JSON

'{"apple":"red","book":["history","art","science"]}' 

, но когда я хочу сделать это в Golang, все становится более сложным, у меня есть определить-структуру первый:

type Gadget struct { 
    Apple string 
    Book []string 
} 
g := Gadget{Apple: "red", Book: []string{"history", "art", "science"}} 
bytes, _ := json.Marshal(g) 
fmt.Println(string(bytes)) 

есть некоторый golang Lib, которые могут помочь мне манипулировать строку JSON, как питон? У меня может быть много JSON, у которых есть разные структуры. Определить их - это суетливая работа. Я даже не думаю, что есть причина lib, поскольку в golang нет механизма перегрузки индексатора.

Что вы, ребята, говорите?

ответ

6

Вопрос будет вне темы, как он просит ресурсов внеплощадочных, но она может быть решена с помощью стандартного LIB, так:

Вам не нужно-структуру, вы можете просто использовать встроенные карты и срезы, которые могут моделировать все структуры данных.

Ваш пример:

err := json.NewEncoder(os.Stdout).Encode(map[string]interface{}{ 
    "apple": "red", 
    "book": []interface{}{ 
     "history", "art", "science", 
    }, 
}) 
fmt.Println(err) 

Output (попробуйте на Go Playground):

{"apple":"red","book":["history","art","science"]} 
<nil> 
+0

хороший ответ, спасибо. если у меня есть строка json '{" apple ":" red "," book ": [" history "," art "," science "]} ' и я хочу добавить элемент, чтобы получить '{" apple " : «красный», «книга»: [«история», «искусство», «наука», «философия»]} 'что было бы самым быстрым способом? –

+3

@ 刘 韦 菠 Это был бы такой ответ: [Взять строку JSON, развязать ее на карту, отредактировать и перевести ее в байтовый фрагмент] (http://stackoverflow.com/questions/28877512/taking-a-json- строка-демаршалинга-он-в-а-mapstringinterface-редактирование-ан/28878037 # 28878037). – icza

Смежные вопросы