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 回答