2015-09-20 4 views
1

Мне нужно преобразовать ассоциативный массив, чтобы поместить их в Json, но я не могу понять, как это сделать. Метод to!string добавить ненужные косые черты.Как преобразовать ассоциативный массив в ключ: значение?

int[string] name; 
name["Python"] = 5; 
Json tags = Json.emptyObject; //Json object 
tags["tags"] = name.to!string; 
writeln(tags); 

{"tags":"[\"Python\":1]"}

мне нужно получить: {"tags":{"Python":1}}

Кроме того, я думал об использовании tuples так что если есть какое-либо решение для них я хотел бы посмотреть на него.

+0

Вам нужно получить неверную JSON? –

+0

Попробуйте запустить его в валидаторе, какова цель в нечетном количестве кавычек? –

+0

Извините, я почему-то не заметил ваше ключевое слово vibed - удалил мой ответ. –

ответ

3

to!string - неправильный подход. Вы не хотите конвертировать в общую строку, а в JSON.

Моя первая идея была бы tags["tags"] = name;. Но у vibe.d's JSON, похоже, нет opAssign, который принимает общий ассоциативный массив.

Вторая идея, перебираем name и назначить его элементы в tags["name"]:

import vibe.data.json; 
import std.stdio; 

void main() 
{ 
    int[string] name; 
    name["Python"] = 5; 
    Json tags = Json.emptyObject; //Json object 

    tags["tags"] = Json.emptyObject; 
    foreach (k, v; name) tags["tags"][k] = v; 

    writeln(tags); 
} 
+0

Было бы проще с кортежами (или AliasSeq, как они теперь называются)? –

+0

Мне непонятно, что вы будете делать с кортежами здесь (независимо от того, std.typecons.Tuple или std.meta.AliasSeq). – user5356566

+0

Я не могу понять, какая разница между std.typecons.Tuple и std.meta.AliasSeq ... –