2016-09-15 3 views
0

У меня есть этот JSON:Можно ли использовать ссылки в JSON?

{ 
    "app_name": "my_app", 
    "version": { 
     "1.0": { 
      "path": "/my_app/1.0" 
     }, 
     "2.0": { 
      "path": "/my_app/2.0" 
     } 
    } 
} 

ли это как-то можно ссылаться на ключевые слова app_name и ключ version так, что я не должен повторять «my_app» и нумерацию версий?

я думал что-то вдоль линий ... (код полностью составил):

{ 
    "@app_name": "my_app", 
    "version": { 
     "1.0": { 
      "path": "/{{$app_name}}/{{key[-1]]}}" 
     }, 
     "2.0": { 
      "path": "/{{$app_name}}/{{key[-1]}}"  
     } 
    } 
} 

Или это то, что может вместо того, чтобы обращаться лучше с помощью YAML?

В конце концов, я намерен прочитать эти данные в словаре Python.

+0

Я бы предположил, что '{{$ key}}' ссылается на путь '' ', а не' '1.0" ' – Anthon

+0

Я нашел [jsonref] (https://pypi.python.org/pypi/jsonref) что позволяет использовать ссылки в JSON. Я просто не думаю, что могу использовать относительные ссылки на используемые им ключи (что означает захват «1.0» и «2.0» в моем псевдо-коде выше). – fredrik

+0

@ Энн, да, ты прав. Я отредактировал это, чтобы сказать что-то еще ... – fredrik

ответ

1

У JSON нет ссылок. (Функциональность, которую вы запрашиваете здесь, с расширением подстроки, открыла бы себе атаки памяти на парсер, не поддерживая эту функциональность, JSON избегает уязвимости для таких атак).

Если вам нужна такая функциональность, вам необходимо реализовать ее самостоятельно.

+0

Можете ли вы предоставить источник в отношении атак на YAML на основе функциональных возможностей ссылок? Я могу найти уязвимости, основанные на создании объектов в результате тегирования. – Anthon

+0

@ Хотя в данном случае я имею в виду атаки с усилением памяти - это также было сделано против расширений XML, предлагающих ту же функциональность, используя вложенные включения для создания документов, которые занимают небольшую пропускную способность для передачи, но большое количество памяти для синтаксического анализа. Следовательно, атаки DOS, а не атаки на выполнение кода (как те, на которые вы ссылались выше). –

+0

Интересные концепции. Я собираюсь запустить несколько тестов, чтобы узнать, какой уровень усиления вы можете получить в Python. Я вижу большую проблему при использовании ссылок для слияния словарей, так как большинство парсеров расширяют их при чтении (единственное исключение, которое я знаю, - это мой parser ruamel.yaml для Python в режиме «туда-обратно»). – Anthon

0

Не в чистом JSON, но вы можете выполнять замену строк после разбора JSON.

Смежные вопросы