解析assets的json文件

该文章介绍了如何在Android应用中使用assets目录存储JSON文件,并通过Gson库解析JSON数据,展示了一个读取并显示JSON数据到UI的例子。
摘要由CSDN通过智能技术生成

目录

 一、assets介绍

二、 在assets文件夹创建json文件

三、例子

效果图:

添加依赖:

MainActivity:

activity_main:

AnalyseJson: 

MyBean : 

四、将数据封装成JSON格式



 一、assets介绍

        Android的assets目录是一种用于存储应用程序内部资源文件的文件夹。与res(资源)文件夹不同,assets文件夹中的文件不会在编译时被压缩成二进制格式,而是保留原始文件格式,并作为应用程序的一部分打包到APK文件中。

        这使得开发者可以使用相对路径访问assets目录下的文件,而无需通过资源ID来引用它们。assets目录通常用于存储大型数据文件或其他需要以原始形式访问的文件,如HTML、CSS、JavaScript文件等。

        使用assets目录可以允许应用程序访问含有自定义格式的数据文件,例如SQLite数据库文件或者字体文件等。 但需要注意的是,由于assets目录中的文件未经压缩,在运行时读取文件时可能会导致性能瓶颈,因此建议只在必要时使用该目录存储文件。

二、 在assets文件夹创建json文件

创建assets文件夹:

在assets文件夹下创建文件(注意文件名的后缀是.json): 

 三、例子

效果图:

添加依赖:

implementation 'com.google.code.gson:gson:2.8.5'

MainActivity:

package com.example.json;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
TextView name1,name2,name3;
TextView sex1,sex2,sex3;
List<MyBean.Student> mList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initData() {
        mList = new ArrayList<>();
        AnalyseJson analyseJson = new AnalyseJson();
        mList = analyseJson.getStudentData(MainActivity.this);
        name1.setText(mList.get(0).getName());
        name2.setText(mList.get(1).getName());
        System.out.println(mList.get(1).getName());
        name3.setText(mList.get(2).getName());
        System.out.println(mList.get(2).getName());
        sex1.setText(mList.get(0).getSex());
        sex2.setText(mList.get(1).getSex());
        sex3.setText(mList.get(2).getSex());

    }

    private void initView() {
        name1 = findViewById(R.id.name1);
        name2 = findViewById(R.id.name2);
        name3  = findViewById(R.id.name3);
        sex1 = findViewById(R.id.sex1);
        sex2 = findViewById(R.id.sex2);
        sex3 = findViewById(R.id.sex3);
    }
}

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:textSize="15sp"
        android:text="姓名:"
        />
    <TextView
        android:id="@+id/name1"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        />
    <TextView
        android:textSize="15sp"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="性别:"/>
    <TextView
        android:id="@+id/sex1"
        android:textSize="15sp"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        />

</LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:text="姓名:"
            />
        <TextView
            android:id="@+id/name2"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            />
        <TextView
            android:textSize="15sp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="性别:"/>
        <TextView
            android:id="@+id/sex2"
            android:textSize="15sp"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            />

    </LinearLayout>
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:textSize="15sp"
        android:text="姓名:"
        />
    <TextView
        android:id="@+id/name3"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        />
    <TextView
        android:textSize="15sp"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="性别:"/>
    <TextView
        android:id="@+id/sex3"
        android:textSize="15sp"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        />

</LinearLayout>
</LinearLayout>

AnalyseJson: 

package com.example.json;

import android.content.Context;
import android.widget.Toast;

import com.google.gson.Gson;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class AnalyseJson {
    /**
     * 返回String类型的Json
     * @param context
     * @param fileName
     * @return
     */
    public String loadJSONFromAsset(Context context, String fileName) {
        String json = null;
        try {
            InputStream inputStream = context.getAssets().open(fileName);
            int size = inputStream.available();
            byte[] buffer = new byte[size];
            inputStream.read(buffer);
            inputStream.close();
            json = new String(buffer, "UTF-8");
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return json;
    }

    /**
     * 解析json数据
     * @param context
     * @return
     */
    public List<MyBean.Student> getStudentData(Context context){
        Gson gson = new Gson();
        MyBean myBean = gson.fromJson(loadJSONFromAsset(context,"data.json"),MyBean.class);
        Toast.makeText(context,"code:"+myBean.getCode()+",Message:"+myBean.getMessage(),Toast.LENGTH_LONG).show();
        final List<MyBean.Student> dataBeans = myBean.getData();
        return dataBeans;
    }
}

MyBean : 

package com.example.json;

import java.util.List;

public class MyBean {
    private int code;
    private String message;
    private List<Student> data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<Student> getData() {
        return data;
    }

    public void setData(List<Student> data) {
        this.data = data;
    }

    class Student {
    String id;
    String name;
    String sex;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}}

在assets下的data.json文件的json数据:

{
  "code": 200,
  "message": "获取成功",
  "data":[
    {
      "id":"001",
      "name":"小明",
      "sex":"男"
    },
    {
      "id":"002",
      "name":"小花",
      "sex":"女"
    },
    {
      "id":"003",
      "name":"小王",
      "sex":"男"
    }
  ]
}

四、将数据封装成JSON格式

 public String translate_into_Json(){
        JSONObject person = new JSONObject();
        try {
            person.put("name","小明");
            person.put("id",10);
            person.put("age",19);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return person.toString();
    }

运行结果: 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值