Tak jak mówisz, łańcuchy to tablica, a nie obiekt. Musisz: (i) przekonwertować json strun jako obiekt.
{
"strings": {
"key_one": "value_one!",
"key_two": "value_two!"
}
}
W takim przypadku istniejący kod będzie w porządku. To właśnie bym zrobił, gdybyś miał kontrolę nad jsonem, który parsujesz.
lub (ii) iteracyjne nad tablicy ciągów - Chciałbym to zrobić tylko wtedy, gdy json jest określona przez jakiś Thrid imprezę - będzie to wyglądać mniej więcej tak:
std::vector<std::string> all_keys;
for (int index = 0; index < strings.size(); ++index) {
std::vector<std::string> cur_keys = strings[index].getMemberNames();
all_keys.insert(all_keys.end(), cur_keys.begin(), cur_keys.end());
}
jednak rzeczywiście przy wartości w all_keys, aby uzyskać dostęp do wszystkiego w tablicy łańcuchów później, będzie bolesne - możesz chcieć przechowywać pary klucz-wartość na mapie.
std::map<std::string,std::string> key_values;
for (int index = 0; index < strings.size(); ++index) {
std::vector<std::string> cur_keys = strings[index].getMemberNames();
for(int j=0; j<cur_keys.size(); ++j)
key_values[cur_keys[j]] = ...
}
Lub przynajmniej przechowywać indeks tablicy ciągów, w której znaleziono klucz.
std::vector<std::pair<int,std::string> > all_keys; std::vector<std::string> all_keys;
for (int index = 0; index < strings.size(); ++index) {
std::vector<std::string> cur_keys = strings[index].getMemberNames();
for(int j=0; j<cur_keys.size(); ++j)
all_keys.push_back(std::make_pair(index, cur_keys[j]));
}
Twoja pierwsza odpowiedź była moim idealnym rozwiązaniem, ale nie mogłem się dowiedzieć, jak zmodyfikować mój kod PHP, aby mieć ten format, opublikowałem to pytanie tutaj, w międzyczasie, wypróbuję inne rozwiązania :) http://stackoverflow.com/questions/11444171/php-to-json-format –