фильтр не работает на python (json вывод) - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь отфильтровать вывод json в python, но не работает. Вот мой json вывод

[ 
        {
            "type": 1
            "name" : "name 1",
            "field" : "aaa",
        }, 
        {
            "type": 2
            "name" : "name 2",
            "field" : "bbb",
        }, 
        {
            "type": 1
            "name" : "name 3"
            "field" : "ccc"
        }, 
]

То, что я хотел бы увидеть:

[ 
        {
            "field" : "aaa",
        }, 
        {
            "field" : "bbb"
        }, 
        {
            "field" : "ccc"
        }, 
]

Вот мой код, но он не работает. Может кто-нибудь помочь и показать мне, что я делаю неправильно или отсутствует? Я получаю ошибку 500 при попытке загрузить / проверить в своем браузере.

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

app = Flask(__name__)
@app.route('/test')
def Test():
  uri = "https://gitlab.local.com/api/v4/projects/"
  params = {"search":"my_test"}

# Get my_test data from URI
  response = requests.get(uri, params=params)

# Transform json input to python objects
  input_dict = json.loads(response)

# Filter python objects with list comprehensions
  output_dict = [x for x in input_dict if x['field']]

# Transform python object back into json
  output_json = json.dumps(output_dict)

# Show json on browser
  print (output_json)

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Спасибо за вашу помощь.

Я попробовал предложения, но это не сработало. Я получаю сообщение об ошибке ниже:

2020-01-16T10:37:33.440-03:00 [APP/PROC/WEB/0] [ERR] TypeError: the JSON object must be str, bytes or bytearray, not Response
2020-01-16T10:37:33.440-03:00 [APP/PROC/WEB/0] [ERR] raise TypeError(f'the JSON object must be str, bytes or bytearray,

'

К счастью, я смог решить эту проблему с помощью кода ниже:

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

app = Flask(__name__)
@app.route('/test')
def Test():
  uri = "https://gitlab.local.com/api/v4/projects/"
  params = {"search":"my_test"}

  response = requests.get(uri, params=params).content
  data = json.loads(response)
  paragraph = "id: " + str(data[0]["id"]) + "; Description: " + data[0]["description"] + "; path: " + data[0]["path"]
  return({"Test" : paragraph})
0 голосов
/ 15 января 2020

С учетом этого ввода:

input = [ 
    {
        "type": 1,
        "name" : "name 1",
        "field" : "aaa"
    }, 
    {
        "type": 2,
        "name" : "name 2",
        "field" : "bbb"
    }, 
    {
        "type": 1,
        "name" : "name 3",
        "field" : "ccc"
    }
]

это:

output = [x['field'] for x in input]

верните это:

[u'aaa', u'bbb', u'ccc']

, если вместо этого вам нужен список диктов:

output = [{'field': x['field']} for x in input]
...