1

JSからCに送信されたCの辞書の辞書を解析するには? 以下は、解析しようとしているネストされた辞書のサンプルデータと形式です。

var temp_DATA_CONTAINER =  {'KEY_1':"abc", 'KEY_2':"bcd", 'KEY_1':"efg"};
var outer_dictionary  =  {'OUTER_KEY' : temp_DATA_CONTAINER};      
Pebble.sendAppMessage(outer_dictionary);

通信にアプリ メッセージを使用しているため、 inbox_received_callback内で C でデータを受信すると、以下のコードを試して辞書からデータを取得しました。

これは私が試したものですが、うまくいきません:

Tuple *t = dict_read_first(iterator);
while (t != NULL)
{
    switch (t->key)
    {
    case OUTER_KEY:
        {
             DictionaryIterator *iterator1 = (DictionaryIterator *)t->value->data;
                 Tuple *tuple1 = dict_read_first(iterator1);

                    while(tuple1 != NULL)
                    {
                            switch(tuple1->key)
                            {
                              case KEY_1:
                              {
                                 printf("~~ In key 1  ");
                                break;
                              }
                              case KEY_2:
                              {
                                 printf("~~In key  2");
                                break;
                              }
                              case KEY_3:
                              {
                                 printf("~~In key  3");
                                break;
                             }
                         }
                       // Get next pair, if any
                      tuple1 = dict_read_next(iterator1);
                    }   
        }
}

 t = dict_read_next(iterator);
}

このコードは機能していません。ここで何か間違っていると思います:

DictionaryIterator *iterator1 = (DictionaryIterator *)t->value->data; 

しかし、それを行うための正しいアプローチを理解することはできません。

4

1 に答える 1

2

外側のイテレータを正しく初期化したと仮定しているので、内側のイテレータは次のようなものを使用する必要があります。

DictionaryIterator iterator1;

Tuple *tuple = dict_read_begin_from_buffer(&iterator1, t->value->data, strlen(t->value->data));

dict_read_first は単にバッファの先頭にリセットしますが、ドキュメントを正しく読んでいる場合は、それを初期化するために dict_read_begin_from_buffer が必要です。

于 2015-10-15T06:37:43.760 に答える