Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What is going on with this article?
@Bluewind1997

Android StudioでJsonを使う方法

More than 1 year has 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"
    }
  ]
}
11
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Bluewind1997
Kotlin使ったアプリ開発とかしてる人 https://www.gensounosakura.work
asia-quest
DX実現を目指す企業と並走する「デジタルインテグレーター」です。 通常のシステムインテグレーションだけではなく、お客様のDXを共に考えるコンサルティングから、 DXに必要な様々なデジタルテクノロジーの専門チームを有し、お客様のゴールに向けてシステムの設計、開発、運用までを一貫して請け負います。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
11
Help us understand the problem. What is going on with this article?