

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Praktik terbaik untuk membaca data JSON
<a name="parsing-json-data"></a>

JavaScript Object Notation (JSON) adalah metode umum untuk encoding struktur data sebagai teks. Banyak aplikasi dan alat output data yang dikodekan JSON-.

Di Amazon Athena, Anda dapat membuat tabel dari data eksternal dan menyertakan data dikodekan JSON di dalamnya. Untuk tipe data sumber seperti itu, gunakan Athena bersama [Perpustakaan JSON SerDe](json-serde.md). 

Gunakan kiat berikut untuk membaca data yang dikodekan JSON:
+ Pilih yang benar SerDe, JSON asli SerDe`org.apache.hive.hcatalog.data.JsonSerDe`, atau SerDe `org.openx.data.jsonserde.JsonSerDe` OpenX,. Untuk informasi selengkapnya, lihat [Perpustakaan JSON SerDe](json-serde.md).
+ Pastikan bahwa setiap catatan yang disandikan JSON diwakili pada baris terpisah, tidak dicetak dengan cantik.
**catatan**  
 SerDe Mengharapkan setiap dokumen JSON berada pada satu baris teks tanpa karakter penghentian baris yang memisahkan bidang dalam catatan. Jika teks JSON dalam format cetak cantik, Anda mungkin menerima pesan kesalahan seperti HIVE\$1CURSOR\$1ERROR: Row is not a valid JSON Object or HIVE\$1CURSOR\$1ERROR:: Unexpected JsonParseException end-of-input: expected close marker for OBJECT saat Anda mencoba menanyakan tabel setelah Anda membuatnya. Untuk informasi selengkapnya, lihat [File Data JSON](https://github.com/rcongiu/Hive-JSON-Serde#json-data-files) di dokumentasi SerDe OpenX. GitHub 
+ Hasilkan data yang dikodekan JSON Anda dalam kolom peka huruf.
+ Beri opsi untuk mengabaikan catatan dengan bentuk yang salah, seperti dalam contoh ini.

  ```
  CREATE EXTERNAL TABLE json_table (
    column_a string,
    column_b int
   )
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true')
   LOCATION 's3://amzn-s3-demo-bucket/path/';
  ```
+ Konversi bidang dalam data sumber yang memiliki skema yang belum ditentukan ke string yang dikodekan JSON di Athena.

Saat Athena membuat tabel yang didukung oleh data JSON, Athena akan menguraikan data berdasarkan skema yang ada dan yang ditentukan sebelumnya. Namun, tidak semua data Anda mungkin memiliki skema yang ditentukan sebelumnya. Untuk menyederhanakan manajemen skema dalam kasus tersebut, ini sering berguna untuk mengonversi bidang dalam sumber data yang memiliki skema yang belum ditentukan untuk string JSON di Athena, kemudian menggunakan [Perpustakaan JSON SerDe](json-serde.md).

Sebagai contoh, pertimbangkan sebuah aplikasi IOT yang mempublikasikan peristiwa dengan bidang umum dari sensor yang berbeda. Salah satu bidang tersebut harus menyimpan muatan kustom yang unik untuk sensor yang mengirim peristiwa. Dalam hal ini, karena Anda tidak tahu skema, kami sarankan Anda menyimpan informasi sebagai string dikodekan JSON. Untuk melakukan ini, konversi data dalam tabel Athena Anda ke JSON, seperti dalam contoh berikut. Anda juga dapat mengonversi data yang dikodekan JSON ke tipe data Athena.

**Topics**
+ [Mengkonversi tipe data Athena ke JSON](converting-native-data-types-to-json.md)
+ [Mengkonversi tipe data JSON ke Athena](converting-json-to-native-data-types.md)

# Mengkonversi tipe data Athena ke JSON
<a name="converting-native-data-types-to-json"></a>

Untuk mengonversi tipe data Athena ke JSON, gunakan `CAST`.

```
WITH dataset AS (
  SELECT
    CAST('HELLO ATHENA' AS JSON) AS hello_msg,
    CAST(12345 AS JSON) AS some_int,
    CAST(MAP(ARRAY['a', 'b'], ARRAY[1,2]) AS JSON) AS some_map
)
SELECT * FROM dataset
```

Kueri ini menghasilkan:

```
+-------------------------------------------+
| hello_msg      | some_int | some_map      |
+-------------------------------------------+
| "HELLO ATHENA" | 12345    | {"a":1,"b":2} |
+-------------------------------------------+
```

# Mengkonversi tipe data JSON ke Athena
<a name="converting-json-to-native-data-types"></a>

Untuk mengonversi tipe data JSON ke Athena, gunakan `CAST`.

**catatan**  
Dalam contoh ini, untuk menunjukkan string sebagai dikodekan JSON, mulai dengan `JSON` dan gunakan tanda kutip tunggal, seperti `JSON '12345'` 

```
WITH dataset AS (
  SELECT
    CAST(JSON '"HELLO ATHENA"' AS VARCHAR) AS hello_msg,
    CAST(JSON '12345' AS INTEGER) AS some_int,
    CAST(JSON '{"a":1,"b":2}' AS MAP(VARCHAR, INTEGER)) AS some_map
)
SELECT * FROM dataset
```

Kueri ini menghasilkan:

```
+-------------------------------------+
| hello_msg    | some_int | some_map  |
+-------------------------------------+
| HELLO ATHENA | 12345    | {a:1,b:2} |
+-------------------------------------+
```