Как исправить: проблема Unicode, сравнивая строку с JSON - PullRequest
0 голосов
/ 02 июля 2019

Я работаю над погодным приложением.Он предоставит список городов в файле JSON.Затем пользователь может выполнить поиск по данному городу, и приложение предоставит данные о погоде.

Функция поиска по городу работает "отлично".Но точно знаю, что пользователь искал город, и у меня есть только его название.Для разбора данных о погоде мне нужен идентификатор города.Поэтому я создал два списка, один для названия и один для ID города.Выбрав один город, я хочу снова найти город и запомнить место города в списке.Затем я буду использовать позицию, чтобы получить идентификатор города.

from flask import Flask, flash, jsonify, redirect, render_template, request, session
import json
import string

app = Flask(__name__)

CITIES = []
ID = []

with open('cities_list/city.list.json') as f:
    data = json.load(f)
    for city in data['cities']:
        CITIES.append(city['name'])
        ID.append(city['id'])

@app.route('/city')
def city():
    return render_template('city.html')

@app.route('/search', methods=['GET','POST'])
def search():
    if request.method == "GET":
        # Read cities.list.json file and display cities
        cities = []
        q = request.args.get('q')

        for city in CITIES:
            if q in city:
                cities.append(city)

        return render_template('search.html', cities=cities)

    else:
        inpt = request.form.get("city")
        counter = 0
        for city in CITIES:
            counter = counter + 1
            if input in city:
                id = ID[i]
        return render_template('index.html', id=id)

Когда я запускаю код, я получаю сообщение об ошибке:

if input in city:

TypeError: приведение в Unicode: потребностьнайдена строка или буфер, встроенный_функция_метод

Я уже пытался преобразовать переменную города в строку.Но тогда он говорит:

if input in city:

Ошибка типа: приведение к Unicode: нужна строка или буфер, найден встроенный_функция_метод

Рад за любую помощь!Спасибо за вашу поддержку!

1 Ответ

1 голос
/ 02 июля 2019

input является функцией builtin.Ваша переменная имеет имя inpt

    inpt = request.form.get("city")
    counter = 0
    for city in CITIES:
        counter = counter + 1
        if inpt in city:
            id = ID[i]
    return render_template('index.html', id=id)

уведомление if inpt in city против if input in city

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...