Как скопировать текст с форматированием из запроса картографического сервера Arcgis в текстовый файл, сохраняя при этом форматирование, используя python 3?

Я пытаюсь автоматизировать процесс, с помощью которого я могу запросить сервер карт Arcgis, взять полученный текст и сохранить его в виде файла.json.

Картографический сервер может быть запрошен через API.

api = "https://csg.esri-southafrica.com/server/rest/services/CSGSearch/MapServer/2/query?where=1%3D1&text=&objectIds=&time=&geometry=2053965%2C-4019103%2C2054056%2C-4019169+&geometryType=esriGeometryEnvelope&inSR=3857&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=3857&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=&parameterValues=&rangeValues=&f=pjson"

Этот URL-адрес не так важен, но когда я запускаю его в браузере, он дает такой ответ:

    {
     "displayFieldName": "SP_NAME",
     "fieldAliases": {
      "OBJECTID": "OBJECTID",
      "GID": "Geometry Identifier",
      "PRCL_KEY": "26 Digit Code",
      "PRCL_TYPE": "Parcel Type",
      "LSTATUS": "Legal Status",
      "WSTATUS": "Work Status",
      "GEOM_AREA": "Geometry Area",
      "COMMENTS": "Comments",
      "TAG_X": "Longitude",

    etc.etc.etc

Если я скопирую этот текст в блокнот и сохраню как "any_file.json". Затем я могу загрузить это в qgis и сохранить как шейп-файл.

Я использовал следующий код, чтобы попытаться достичь этого

import requests


mainapi = "https://csg.esri-southafrica.com/server/rest/services/CSGSearch/MapServer/2/query?where=1%3D1&text=&objectIds=&time=&geometry=2053965%2C-4019103%2C2054056%2C-4019169+&geometryType=esriGeometryEnvelope&inSR=3857&spatialRel=esriSpatialRelIntersects&relationParam=&outFields=*&returnGeometry=true&returnTrueCurves=false&maxAllowableOffset=&geometryPrecision=&outSR=3857&returnIdsOnly=false&returnCountOnly=false&orderByFields=&groupByFieldsForStatistics=&outStatistics=&returnZ=false&returnM=false&gdbVersion=&returnDistinctValues=false&resultOffset=&resultRecordCount=&queryByDistance=&returnExtentsOnly=false&datumTransformation=&parameterValues=&rangeValues=&f=pjson"

r = str(requests.get(mainapi).json())

#Write response to json text file
with open("csg_erven.json", "w") as f:
    f.write(r)

Результаты в файле.json не отформатированы

они появляются как таковые:

{'displayFieldName': 'SP_NAME', 'fieldAliases': {'OBJECTID': 'OBJECTID', 'GID': 'Geometry Identifier', 'PRCL_KEY':

Я новичок в кодировании в целом, но я предполагаю, что форматирование здесь имеет решающее значение. Как я могу скопировать текст с форматированием? Это проблема кодирования?

Когда я вручную копирую отформатированный текст из браузера, он работает нормально, но однострочный текст не работает.

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Мне кажется, что в сохранении файла есть некоторая путаница. Попробуйте использовать библиотеку json вместо преобразования в строку и сохранения в виде текста, что может привести к проблемам

import json
with open('csg_erven.json', 'w') as f:
    json.dump(requests.get(mainapi).json(), f)
Другие вопросы по тегам