Какой язык кода кода Sphinx использовать для JSON

Я использую Sphinx для документирования веб-службы. Я хотел бы показать отформатированный веб-ответ JSON, используя директиву кода-кода, который Spinx выполняет через Pygments, но JSON не имеет синтаксического маркера в Pygments. На каком языке вы указываете вместо этого? HTML? JavaScript?

.. code-block:: javascript

    {
      "name": "roger",
      "score": 100
    }

Ответ 1

Я использую Sphinx 1.4.2, который включает лексир Pygments, называемый json. По умолчанию это доступно из коробки. Использовать:

.. code-block:: json

    {
        "key": "value",
        "key2": "value2",
        ...
    }

Ответ 2

Я не был доволен использованием javascript pygments для разбора JSON. Да, JSON можно проанализировать с помощью javascript lexer, но подсветка javascript не очень полезна при применении к значению JSON. Обычно вы получаете гигантский кусок недифференцированного текста.

Поскольку я не мог найти хорошего решения, я создал JSON lexer для пигментов. Я использую его сейчас для выделения JSON в созданном PDF-документе сфинкса. Это не идеально, но результаты гораздо полезнее, чем с javascript lexer. Надеюсь, это поможет.

Ответ 3

JSON - это JavaScript, простой и простой. JSON фактически означает "Обозначение объектов JavaScript".

Ответ 4

Даже с Sphinx 1.2b1 и Pygments 1.6 мне нужно было вызвать add_lexer, чтобы получить .. code-block:: json, чтобы что-то сделать. В результате я добавил следующий фрагмент кода в расширение (docs/_ext/jsonlexer.py):

def setup(app):
    # enable Pygments json lexer
    try:
        import pygments
        if pygments.__version__ >= '1.5':
            # use JSON lexer included in recent versions of Pygments
            from pygments.lexers import JsonLexer
        else:
            # use JSON lexer from pygments-json if installed
            from pygson.json_lexer import JSONLexer as JsonLexer
    except ImportError:
        pass  # not fatal if we have old (or no) Pygments and no pygments-json
    else:
        app.add_lexer('json', JsonLexer())

Мой docs/conf.py для Sphinx имеет следующие возможности для расширения:

import os
import sys

sys.path.insert(0, os.path.abspath('_ext'))

# Add any Sphinx extension module names here, as strings. They can be
# extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = ['jsonlexer']