16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

はじめに

外部からAPIとか使ってJsonを持ってくる方式については多かったけども、
内部に置く方法が意外と少なかったから覚書程度に書く。

内容

  • AndroidでJsonを使おう
  • AndroidStudioの内部にJsonを置いて使う方法

Json準備

Jsonファイル

今回使うJsonファイル

Sample.json
{
  "sample": [
    {
      "name": "Andy",
      "age": 31,
      "gender": false,
      "other": ""
    },
    {
      "name": "Bob",
      "age": 14,
      "gender": false,
      "other": "Student"
    },
    {
      "name": "Carry",
      "age": 22,
      "gender": true,
      "other": "Rich"
    },
    {
      "name": "Daniel",
      "age": 1,
      "gender": false,
      "other": "Baby"
    },
    {
      "name": "Emily",
      "age": 80,
      "gender": true,
      "other": "Grand"
    }
  ]
}

設置

AndroidStudio上でAssetフォルダを作成。
画像を参考に。
スクリーンショット 2019-12-06 19.37.55.png

作ったAssetフォルダの中にJsonファイルを設置。

読みこみ

Jsonからのデータ読み込み

String型のデータで読み込む。

MainActivity.kt
val assetManager = resources.assets //アセット呼び出し
val inputStream = assetManager.open("Sample.json") //Jsonファイル
val bufferedReader = BufferedReader(InputStreamReader(inputStream)) 
val str: String = bufferedReader.readText() //データ

strの中にJsonのデータがString型で入る。

Jsonで使う

結構派閥あるから、他にもやり方はいっぱいあると思う。

MainActivity.kt
try {
  val jsonObject = JSONObject(str)
  val jsonArray = jsonObject.getJSONArray("sample")
  for (i in 0 until jsonArray.length()) {
    val jsonData = jsonArray.getJSONObject(i)
    Log.d("Check", "$i : ${jsonData.getString("name")}")
  }
} catch (e: JSONException) {
  e.printStackTrace()
}

実行結果

D/Check: 0 : Andy
D/Check: 1 : Bob
D/Check: 2 : Carry
D/Check: 3 : Daniel
D/Check: 4 : Emily

このデータを他に色々使おうねっていう。

部分説明

"sample"の部分はjson内のテーブル(?)名

jsonObject.getJSONArray("sample")

"name"の部分で引っ張るデータが変わる。
引っ張りたい型名によってgetが変わる

jsonData.getString("name")
jsonData.getInt("age")
jsonData.getBoolean("gender")

おしまい

ほとんど自分のための覚書だからわかりづらいとかあれば修正します。

使ったプログラム(一応)

Activity

MainActivity.kt
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.json.JSONException
import org.json.JSONObject
import java.io.BufferedReader
import java.io.InputStreamReader

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val assetManager = resources.assets
        val inputStream = assetManager.open("Sample.json")
        val bufferedReader = BufferedReader(InputStreamReader(inputStream))
        val str: String = bufferedReader.readText()
        Log.d("check", str)
        try {
            val jsonObject = JSONObject(str)
            val jsonArray = jsonObject.getJSONArray("sample")
            val layout = mainLinerLayout
            for (i in 0 until jsonArray.length()) {
                val jsonData = jsonArray.getJSONObject(i)

                Log.d("Check", "$i : ${jsonData.getString("name")}")

            }
        } catch (e: JSONException) {
            e.printStackTrace()
        }
    }
}

Json

(上に書いたのと一緒)

Sample.json
{
  "sample": [
    {
      "name": "Andy",
      "age": 31,
      "gender": false,
      "other": ""
    },
    {
      "name": "Bob",
      "age": 14,
      "gender": false,
      "other": "Student"
    },
    {
      "name": "Carry",
      "age": 22,
      "gender": true,
      "other": "Rich"
    },
    {
      "name": "Daniel",
      "age": 1,
      "gender": false,
      "other": "Baby"
    },
    {
      "name": "Emily",
      "age": 80,
      "gender": true,
      "other": "Grand"
    }
  ]
}
16
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?