アセットフォルダーにJSONファイルがあります。そのファイルには、配列を持つ1つのオブジェクトがあります。配列には、それぞれ3つの文字列を持つ150以上のオブジェクトがあります。
これらの150以上のオブジェクトのそれぞれについて、各文字列を抽出し、3つの文字列を渡すJavaモデルオブジェクトを作成します。Android JSON解析は、私がしたくないURLからJSONを取得しています。
Gsonライブラリをjsonパーサーとして使用する必要があります。
この依存関係をアプリのgradleファイルに追加します。
compile 'com.google.code.gson:gson:2.8.1'
resフォルダーにrawフォルダーを作成します。次に、jsonファイルをrawフォルダーにコピーします(アセットの代わりにrawフォルダーを使用する方が適切です)。たとえば、my_json.jsonという名前のこのjsonファイルがあります
{
"list": [
{
"name": "Faraz Khonsari",
"age": 24
},
{
"name": "John Snow",
"age": 28
},
{
"name": "Alex Kindman",
"age": 29
}
]
}
次に、モデルクラスを作成します:
public class MyModel {
@SerializedName("list")
public ArrayList<MyObject> list;
static public class MyObject {
@SerializedName("name")
public String name;
@SerializedName("age")
public int age;
}
}
次に、jsonファイルを読み取る関数を作成する必要があります。
public String inputStreamToString(InputStream inputStream) {
try {
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes, 0, bytes.length);
String json = new String(bytes);
return json;
} catch (IOException e) {
return null;
}
}
次に、jsonファイルを読み取ります。
String myJson=inputStreamToString(mActivity.getResources().openRawResource(R.raw.my_json));
次に、json文字列をモデルに変換します。
MyModel myModel = new Gson().fromJson(myJson, MyModel.class);
jsonがモデルに変換されました! おめでとうございます!
以前の回答はうまく機能しますが、Kotlinを使用している場合は、kotlin.ioパッケージのクラスを使用して、非常に簡潔かつ簡潔に行うことができます。
val objectArrayString: String = context.resources.openRawResource(R.raw.my_object).bufferedReader().use { it.readText() }
val objectArray = Gson().fromJson(objectArrayString, MyObject::class.Java)
簡単に再利用したい場合は、ニースの汎用拡張メソッドに変えることもできます。
inline fun <reified T> Context.jsonToClass(@RawRes resourceId: Int): T =
Gson().fromJson(resources.openRawResource(resourceId).bufferedReader().use { it.readText() }, T::class.Java)
次に、次のように単純に呼び出します。
context.jsonToClass<MyObject>(R.raw.my_object)
最初にアセットからjsonファイルを読み取る必要があります。このメソッドを使用できます
public String readFile(String fileName) throws IOException
{
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(getAssets().open(fileName), "UTF-8"));
String content = "";
String line;
while ((line = reader.readLine()) != null)
{
content = content + line
}
return content;
}
それから
String jsonFileContent = readFile("json_in_assets.json");
JSONArray jsonArray = new JSONArray(jsonFileContent);
List<Person> persons = new ArrayList<>();
for (int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObj = jsonArray.getJSONObject(i);
Integer id = jsonObj.getInt("id");
String name = jsonObj.getString("name");
String phone = jsonObj.getString("phone");
persons.add(new Person(id , name , phone));
}