This commit is contained in:
John Hogenmiller 2026-06-11 02:30:18 +00:00 committed by GitHub
commit 5e2791752c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 2 deletions

View file

@ -11,13 +11,13 @@ from datasette.utils.asgi import Response
def convert_specific_columns_to_json(rows, columns, json_cols):
json_cols = set(json_cols)
if not json_cols.intersection(columns):
if not json_cols.intersection(columns) and not json_cols == {"*"}:
return rows
new_rows = []
for row in rows:
new_row = []
for value, column in zip(row, columns):
if column in json_cols:
if column in json_cols or (json_cols == {"*"}):
try:
value = json.loads(value)
except (TypeError, ValueError):

View file

@ -207,6 +207,12 @@ query string arguments:
JSON. Without this argument those columns will be returned as JSON objects
that have been double-encoded into a JSON string value.
If you have many columns containing JSON values, you can pass ``_json=*``
to attempt converting loading all columns as JSON. This is a best effort
approach. Any columns that fail to render as valid JSON will be passed
through unaltered, while any column with valid JSON will be converted.
There may be a performance impact on large result sets.
Compare `this query without the argument <https://fivethirtyeight.datasettes.com/fivethirtyeight.json?sql=select+%27{%22this+is%22%3A+%22a+json+object%22}%27+as+d&_shape=array>`_ to `this query using the argument <https://fivethirtyeight.datasettes.com/fivethirtyeight.json?sql=select+%27{%22this+is%22%3A+%22a+json+object%22}%27+as+d&_shape=array&_json=d>`_
``?_json_infinity=on``