IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android Json数据解析范例粗讲(备忘) -> 正文阅读

[移动开发]android Json数据解析范例粗讲(备忘)

首先感谢下面这个文章的作者,从他的文章找到了方法,我也也是在其方法之上进行的改进。

android studio 3.5上运行通过。api17-api30都正常运行。

用android 本身的库解析json.

解析json数据一(基本json结构):

{
    "name":"张三",
    "age":34,
    "hobby":"没啥爱好"
}

解析json数据二(复杂结构):

{    "person":[
        {
            "name":"小二",
            "age":19,
            "sex":"男"
        },
        {
            "name":"小三君",
            "age":18,
            "sex":"女"
        },
        {
            "name":"小四",
            "age":16,
            "sex":"男"
        }
    ]
}

具体json结构就不讲了,网上很多。主要说下我遇到的”坑“,就是我一直不理解的什么对象,什么列表,以及解析的过程。在我看了不下大几十篇文章后,终于明白了一点。其他json解析的方法网上也有很多。

对象就是{.... }(大括号)内的东西,也叫json对象。

列表就是[... ](中括号)内的东西,这个跟Python一样。

其他就是要一层层解析,好像不可以越层,我现在还不知道,估计要不了多久就知道了。

然后其他就基本是固定的。照写就行了。

布局

我在布局里面用了两个框架,其他没必要。但懒得改。

用了12个TextView,用于显示内容。

1-3显示简单结构的json。

4-12显示的是复杂结构的json。这部分本来可以简化代码,用循环解析并动态生成TextView的方法,但我还没学会,正在研究。

java:

直接看代码吧,我连名词可能都会说错,关键代码看原作者的注释还好。

content_main.xml文件:
?

<?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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">


    <FrameLayout
        android:id="@+id/ll_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent">



        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="80dp"
            android:textSize="30dp"
            android:text="TextView" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="130dp"
            android:textSize="30dp"
            android:text="TextView" />
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="180dp"
            android:textSize="30dp"
            android:text="TextView" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="240dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="280dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
            <TextView
                android:id="@+id/textView8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
            <TextView
                android:id="@+id/textView9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="320dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
            <TextView
                android:id="@+id/textView11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
            <TextView
                android:id="@+id/textView12"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="30dp"
                android:text="TextView" />
        </LinearLayout>


    </FrameLayout>
</LinearLayout>

MainActivity.java文件:

package com.example.test;


import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.List;

import static java.sql.DriverManager.println;

public class MainActivity extends AppCompatActivity {
    //private String json ="{\"code\":\"200\",\"updateTime\":\"2021-12-26T03:35+08:00\",\"fxLink\":\"http://hfx.link/1u0y1\",\"daily\":[{\"fxDate\":\"2021-12-26\",\"sunrise\":\"07:01\",\"sunset\":\"17:47\",\"moonrise\":\"00:00\",\"moonset\":\"11:58\",\"moonPhase\":\"亏凸月\",\"moonPhaseIcon\":\"805\",\"tempMax\":\"13\",\"tempMin\":\"6\",\"iconDay\":\"305\",\"textDay\":\"小雨\",\"iconNight\":\"305\",\"textNight\":\"小雨\",\"wind360Day\":\"45\",\"windDirDay\":\"东北风\",\"windScaleDay\":\"4-5\",\"windSpeedDay\":\"34\",\"wind360Night\":\"45\",\"windDirNight\":\"东北风\",\"windScaleNight\":\"3-4\",\"windSpeedNight\":\"24\",\"humidity\":\"87\",\"precip\":\"1.0\",\"pressure\":\"1019\",\"vis\":\"17\",\"cloud\":\"55\",\"uvIndex\":\"1\"},{\"fxDate\":\"2021-12-27\",\"sunrise\":\"07:02\",\"sunset\":\"17:47\",\"moonrise\":\"00:02\",\"moonset\":\"12:33\",\"moonPhase\":\"下弦月\",\"moonPhaseIcon\":\"806\",\"tempMax\":\"9\",\"tempMin\":\"6\",\"iconDay\":\"305\",\"textDay\":\"小雨\",\"iconNight\":\"350\",\"textNight\":\"阵雨\",\"wind360Day\":\"45\",\"windDirDay\":\"东北风\",\"windScaleDay\":\"3-4\",\"windSpeedDay\":\"24\",\"wind360Night\":\"45\",\"windDirNight\":\"东北风\",\"windScaleNight\":\"1-2\",\"windSpeedNight\":\"3\",\"humidity\":\"78\",\"precip\":\"5.1\",\"pressure\":\"1018\",\"vis\":\"24\",\"cloud\":\"80\",\"uvIndex\":\"1\"},{\"fxDate\":\"2021-12-28\",\"sunrise\":\"07:02\",\"sunset\":\"17:48\",\"moonrise\":\"00:58\",\"moonset\":\"13:09\",\"moonPhase\":\"残月\",\"moonPhaseIcon\":\"807\",\"tempMax\":\"16\",\"tempMin\":\"8\",\"iconDay\":\"101\",\"textDay\":\"多云\",\"iconNight\":\"151\",\"textNight\":\"多云\",\"wind360Day\":\"45\",\"windDirDay\":\"东北风\",\"windScaleDay\":\"1-2\",\"windSpeedDay\":\"3\",\"wind360Night\":\"45\",\"windDirNight\":\"东北风\",\"windScaleNight\":\"3-4\",\"windSpeedNight\":\"16\",\"humidity\":\"74\",\"precip\":\"0.0\",\"pressure\":\"1015\",\"vis\":\"25\",\"cloud\":\"5\",\"uvIndex\":\"4\"}],\"refer\":{\"sources\":[\"QWeather\",\"NMC\",\"ECMWF\"],\"license\":[\"no commercial use\"]}}";
    private TextView textView;
    private TextView textView2;
    private TextView textView3;
    private TextView textView4;
    private TextView textView5;
    private TextView textView6;
    private TextView textView7;
    private TextView textView8;
    private TextView textView9;
    private TextView textView10;
    private TextView textView11;
    private TextView textView12;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        textView=findViewById(R.id.textView);
        textView2=findViewById(R.id.textView2);
        textView3=findViewById(R.id.textView3);
        textView4=findViewById(R.id.textView4);
        textView5=findViewById(R.id.textView5);
        textView6=findViewById(R.id.textView6);
        textView7=findViewById(R.id.textView7);
        textView8=findViewById(R.id.textView8);
        textView9=findViewById(R.id.textView9);
        textView10=findViewById(R.id.textView10);
        textView11=findViewById(R.id.textView11);
        textView12=findViewById(R.id.textView12);
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        analyzeJSON1();
        analyzeJSONArray2();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void analyzeJSON1() {
        String TAG ="";

        String result = "{\n" +
                "    \"name\":\"张三\",\n" +
                "    \"age\":34,\n" +
                "    \"hobby\":\"没啥爱好\"\n" +
                "}";
        // Log.d(TAG, "result:" + result);

        try{
            JSONObject jsonObject = new JSONObject(result);

            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");
            String age1= Integer.toString(age);
            String hobby = jsonObject.getString("hobby");

            textView.setText(name);
            textView2.setText(age1);
            textView3.setText(hobby);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void analyzeJSONArray2() {
        String result =  "{\n" +
                "    \"person\":[\n" +
                "        {\n" +
                "            \"name\":\"小二\",\n" +
                "            \"age\":19,\n" +
                "            \"sex\":\"男\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\":\"小三\",\n" +
                "            \"age\":18,\n" +
                "            \"sex\":\"女\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"name\":\"小四\",\n" +
                "            \"age\":16,\n" +
                "            \"sex\":\"男\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";

        try{
            /**
             * JSON数组在牛逼,一旦有了 key person 这样的标记,就必须先是个 JSON对象
             * 最外层的JSON对象,最大的哪个 { ... }
             */
            JSONObject jsonObjectALL = new JSONObject(result);

            // 通过标识(person),获取JSON数组
            JSONArray jsonArray = jsonObjectALL.getJSONArray("person");

            JSONObject jsonObject = jsonArray.getJSONObject(0);
            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");
            String age1=Integer.toString(age);
            String sex = jsonObject.getString("sex");
            textView4.setText(name);
            textView5.setText(age1);
            textView6.setText(sex);

            JSONObject jsonObject1 = jsonArray.getJSONObject(1);
            String name1 = jsonObject1.optString("name", null);
            int age11 = jsonObject1.optInt("age", 0);
            String age1a=Integer.toString(age11);
            String sex1 = jsonObject1.optString("sex", null);
            textView7.setText(name1);
            textView8.setText(age1a);
            textView9.setText(sex1);

            JSONObject jsonObject2 = jsonArray.getJSONObject(2);
            String name2 = jsonObject2.optString("name", null);
            int age2 = jsonObject2.optInt("age", 0);
            String age21=Integer.toString(age2);
            String sex2 = jsonObject2.optString("sex", null);
            textView10.setText(name2);
            textView11.setText(age21);
            textView12.setText(sex2);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行结果:

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:01:50  更:2022-01-01 14:02:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:26:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码