Konteks: API yang saya integrasikan mengeluarkan data dalam bentuk cetak cantik seperti di bawah ini. Saya memiliki proc penguraian MSSQL yang memerlukan input JSON untuk memiliki bentuk datar dalam satu baris (tab dihapus).

Pertanyaan: Saya telah menemukan beberapa pertanyaan semi-terkait di sini & di sini tetapi tampaknya tidak memenuhi kebutuhan saya karena saya tidak ingin tampil operasi pada tingkat file.

Adakah yang bisa merekomendasikan beberapa metode khusus untuk mengubah teks JSON menjadi satu baris dengan cara yang lebih terperinci? Mungkin ekspresi reguler atau beberapa metode manipulasi string?

Formulir JSON saat ini:

{
  "data": {
    "first_name": "Eric",
    "last_name": "B",
    "email": null,
    "score": null,
    "domain": "@datashiftlabs.io",
    "position": null,
    "twitter": null,
    "linkedin_url": null,
    "phone_number": null,
    "company": null,
    "sources": []
  },
  "meta": {
    "params": {
      "first_name": "Eric",
      "last_name": "B",
      "full_name": null,
      "domain": "@datashiftlabs.io",
      "company": null
    }
  }
}

Bentuk yang diinginkan:

{"data": {"first_name": "Eric","last_name": "B","email": null,"score": null,"domain": "datashiftlabs.io","position": null,"twitter": null,"linkedin_url": null,"phone_number": null,"company": null,"sources": []},"meta": {"params": {"first_name": "Eric","last_name": "B","full_name": null,"domain": "datashiftlabs.io","company": null}}}
3
emalcolmb 6 Agustus 2019, 01:34

1 menjawab

Jawaban Terbaik

Saya tidak yakin apakah itu yang Anda inginkan, tetapi Anda dapat mengonversi string json Anda dengan pustaka json menjadi objek, dan kemudian mengubahnya kembali menjadi string.

Contohnya akan terlihat seperti ini

import json

json_str = """{
  "data": {
    "first_name": "Eric",
    "last_name": "B",
    "email": null,
    "score": null,
    "domain": "@datashiftlabs.io",
    "position": null,
    "twitter": null,
    "linkedin_url": null,
    "phone_number": null,
    "company": null,
    "sources": []
  },
  "meta": {
    "params": {
      "first_name": "Eric",
      "last_name": "B",
      "full_name": null,
      "domain": "@datashiftlabs.io",
      "company": null
    }
  }
}"""

obj = json.loads(json_str)
flatten_str = json.dumps(obj)

print(flatten_str)

Alternatif akan menggunakan penggantian string dan substitusi regex untuk menghapus semua karakter yang tidak perlu seperti jeda baris, banyak spasi, dan tab. Draf cepat untuk fungsi ini akan terlihat seperti ini. Catatan: Regex saat ini tidak berfungsi dengan sempurna dan masih memiliki beberapa perilaku yang tidak diinginkan pada kasus tepi tertentu, mis. beberapa spasi putih di akhir string

import re

def flatten_json(string):
    # Remove line breaks
    string = string.replace("\n", "")
    # Remove tabs and multiple spaces
    string = re.sub('[\t ]+("|{|})', r' \1', string)
    # Return result
    return string
4
Saritus 5 Agustus 2019, 23:17