Форматирование вывода в определенный json

#python #json #python-3.x

#python #json #python-3.x

Вопрос:

Я хочу отформатировать JSON для конкретных значений. Моя конечная цель — преобразовать -33.494 143.2104 в {"lat":-33.494,"lon":143.2104}

Я преобразую IP-адрес в географическую широту и долготу:

 python3.5 -c "
import geoip2.database; reader=geoip2.database.Reader('/geoip_databases/GeoLite2-City.mmdb'); 
response = reader.city('1.2.3.4');
print (response.location.latitude, response.location.longitude)"

-33.494 143.2104
  

Попытался преобразовать его в желаемый результат:

 python3.5 -c "
import geoip2.database; reader=geoip2.database.Reader('/geoip_databases/GeoLite2-City.mmdb'); 
response = reader.city('1.2.3.4')
;a=(response.location.latitude, response.location.longitude); 
b=('{"lat":'   a   '}');
c=b.replace(' ',',"lon"'); 
print (c)"

Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: Can't convert 'tuple' object to str implicitly

  

Как я могу выполнить следующий вывод {«широта»: -33.494, «длина»: 143.2104}, все еще имеющий одну строку?

Комментарии:

1. Как насчет того, чтобы сделать вашу командную строку настоящим скриптом на Python, чтобы всем было легче ее читать?

2. Как бы сильно я ни любил однострочный формат, это уже перебор. Возможно, вам захочется заглянуть в pydash pick and rename, если вы часто имеете дело с файлами json.

3. Вместо того, чтобы печатать два значения, создайте словарь, содержащий их: {'lat': response.location.latitude, 'lon': response.location.longitude} .

4. Это сделает свою работу, хороший момент. Спасибо. печать (‘lat’: response.location. широта, ‘lon’: response.location. долгота) Результаты с: {‘широта’: -33.494, ‘длина’: 143.2104}

Ответ №1:

Вы можете попробовать создать dict и выполнить json.dumps вскоре после этого.

 python3.5 -c "
import geoip2.database, json 
reader=geoip2.database.Reader('/geoip_databases/GeoLite2-City.mmdb'); 
response = reader.city('1.2.3.4');
loc_dict = { lat: response.location.latitude, lon: response.location.longitude }
print (json.dumps(loc_dict, indent=4))"