Python: JSON не читает и символ

В настоящее время у меня есть эта проблема. Когда я добавляю запрос на сервер (например, https://127.0.0.1:5000/?property=Ward&propertyValue=Ely%20North%20Ward, где Ward = Ely North Ward), JSON возвращает значения. Однако, если бы я хотел отфильтровать палаты, которые содержат символ «&» (например, палата = Ely & Christchurch Ward), он не возвращает никаких значений, только { type: «FeatureCollection», features: [ ] }.

Что я могу сделать, чтобы функция считывала символы «&» и возвращала правильные значения из того, что я ввел?

Код ниже:

from flask import Flask, escape, request 
import requests
import json 



def graphqlwfs(url):
    url = "https://osdatahubapi.os.uk/OSFeaturesAPI/wfs/v1?service=wfs&request=GetCapabilities"
    queryString = "&typenames=osfeatures:BoundaryLine_PollingDistrict&outputformat=geoJSON"


    request_json = request.get_json(silent=True)
    request_args = request.args


    if request_json and 'property' in request_json:
        property = request_json['property']
    elif request_args and 'property' in request_args:
        property = request_args['property']
    else:
        property = ""

    if request_json and 'propertyValue' in request_json:
        propertyValue = request_json['propertyValue']
    elif request_args and 'propertyValue' in request_args:
        propertyValue = request_args['propertyValue']
    else:
        propertyValue = ""


    filterString = "&filter=<Filter><PropertyIsEqualTo><PropertyName>" + str(property) + "</PropertyName><Literal>" + str(propertyValue) + "</Literal></PropertyIsEqualTo></Filter>"

    if property == "":
        filterString = ""
    if propertyValue == "":
        filterString = ""


    newUrl = str(url.replace("GetCapabilities", "GetFeature") + queryString + filterString)
    response = requests.get(newUrl)

    features = response.json()



    return features


        ```







Возможно, вам придется экранировать амперсанд в URL-адресе. Обычно & имеет особое значение в URL-адресах, поэтому вы не видите возврата. Просто замените его на %26   —  person jlsr10    schedule 20.11.2019

возвращает ошибку декодирования json   —  person jlsr10    schedule 20.11.2019

Могу ли я что-нибудь сделать, чтобы остановить перенастройку ошибки декодирования?   —  person jlsr10    schedule 20.11.2019

См. также:  Работа с политиками безопасности в Compute Engine API в Python
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. jlsr10

    Попробуйте экранировать символ &. В этом случае код & равен %26. Итак, вы можете попробовать

    ?property=Ward&propertyValue=Ely%20%26%20Christchurch%20Ward

    Для получения дополнительной информации прочитайте эту ссылку.

    возвращает следующую ошибку: json.decoder.JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (char 0) person jlsr10; 20.11.2019

  2. jlsr10

    для меня он работает нормально, может быть, я ошибаюсь, скажите, изменю ответ, может потребоваться больше описания.

    a="sad& wasd"
    if a=="sad& wasd":
       print("hi") 
    output:hi
    

    Вы не работаете с URL-адресами или библиотекой requests. Проблема не в том, чтобы поместить & в строку. person jlsr10; 20.11.2019

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: