PHP декодирует вложенный JSON

У меня есть вложенный код JSON как (на самом деле это мои обновления статуса Facebook)

{
   "data": [
      {
         "id": "1290561400000000",
         "from": {
            "name": "My name",
            "id": "500920000"
         },
         "message": "Message body",
         "updated_time": "2010-08-24T08:22:13+0000",
         "comments": {
            "data": [
               {
                  "id": "129056140474641_8000",
                  "from": {
                     "name": "name1",
                     "id": "100000486072000"
                  },
                  "message": "hahahahahahha..........",
                  "created_time": "2010-08-24T08:40:39+0000"
               },
               {
                  "id": "129056140474641_8000000",
                  "from": {
                     "name": "name2",
                     "id": "1597542457"
                  },
                  "message": "true ya. I have updated",
                  "created_time": "2010-08-24T08:59:53+0000"
               },
               {
                  "id": "129056140474641_83000",
                  "from": {
                     "name": "Name3",
                     "id": "1000004860700000"
                  },
                  "message": "am putting it on my wall....",
                  "created_time": "2010-08-24T09:01:25+0000"
               }
            ],

         }
      }
]

Теперь, как мне получить доступ к комментариям для определенного обновления и распечатать его через Цикл ?? (я получаю, скажем, пару обновлений одновременно). b = [1, 0, 0, 0, 1, 1, 1, 0] # или любой итерируемый с логическими значениями Как мне написать ...

Я начинаю со следующего списка с и bitmask b :

s = ['baa', 'baa', 'black', 'sheep', 'have', 'you', 'any', 'wool']
b = [1, 0, 0, 0, 1, 1, 1, 0] # or any iterable with boolean values

Как написать некоторую функцию apply_bitmask (s, b) , чтобы она возвращала

['baa', 'have', 'you', 'any']
8
задан Kit 24 August 2010 в 10:11
поделиться

3 ответа

Python 3.1 itertools.compress (или Python 2.7, если вы еще не обновились) делает именно это (понимание списка занимает второе место):

import itertools
filtered = itertools.compress(s, b)

Обратите внимание, что это создает итератор, а не список. Экономит память, но если вам нужно повторить ее несколько раз или использовать индексы, вы всегда можете использовать list(itertools.compress(s, b)). Еще короче.

18
ответ дан 5 December 2019 в 04:59
поделиться
[ item for item, flag in zip( s, b ) if flag == 1 ]
10
ответ дан 5 December 2019 в 04:59
поделиться

Вы можете использовать составления списков :

newList = [word for (word, mask) in zip(s,b) if mask]
# Note: Could also use 'if mask == blah', if mask is not a boolean-compatible type.

Сначала будут взяты исходные два списка, а сжать их вместе, чтобы вы получить (временный - он все еще находится внутри списка comp!) список пар слов и их масок - что-то вроде [('baa', 1), ('baa', 0), ...] . Затем в newList добавляются только слова с маской 1 ( if mask == 1 ).

8
ответ дан 5 December 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: