【问题标题】:Parse array from a string with JSON?用 JSON 从字符串中解析数组?
【发布时间】:2023-03-10 03:15:01
【问题描述】:

我正在向php 文件发送一个GETHTTP 请求,该文件返回一个JSON 编码数组。返回的 Array 是 2x2 Array。如何解析HTTP 请求的输出并在Java 中生成2x2 Array,例如String[][]ArrayList

request.php:

<?php
    $return_array = [["c1_r1", "c1_r2", "c1_r3"], ["c2_r1", "c2_r2", "c2_r3"], ["c3_r1", "c3_r2", "c3_r3"]];
    echo json_encode($return_array);
?>

MainActivity.java:

package com.example.test;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.*;
import android.util.*;

import java.io.*;
import java.net.*;
import java.util.*;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        StrictMode.ThreadPolicy mypolicy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(mypolicy);

        try {
            URL url = new URL("http://192.168.1.XXX/request.php");
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
            BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            StringBuilder sb = new StringBuilder();
            sb.append(reader.readLine());

            // HOW TO CONVERT/PARSE THE `sb` String INTO `String[][]`, JUST LIKE THE 2x2 Array STORED IN THE `request.php`

            Log.e("console", sb.toString());

            reader.close();
            con.disconnect();
        } catch (Exception e) {
            Log.e("console", "FAIL " + e);
        }
    }
}

【问题讨论】:

    标签: java android arrays json


    【解决方案1】:

    这是我用来转换您提供的编码 JSON 的代码(经过测试)。

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import org.json.JSONArray;
    import org.json.JSONException;
    
    public class MainActivity extends Activity {
    
        private static JSONArray itemRows = null;
        private static String input =
                "[[\"c1_r1\", \"c1_r2\", \"c1_r3\"]," +
                "[\"c2_r1\", \"c2_r2\", \"c2_r3\"]," +
                "[\"c3_r1\", \"c3_r2\", \"c3_r3\"]]";
        private static String[][] output = new String[3][3];
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // build the Array[][] from the encoded JSON
            try {
                itemRows = new JSONArray(input);
                Log.v("TestJSON","items.length=" + itemRows.length());
                Log.v("TestJSON","input=" + input);
                for(int i=0; i<itemRows.length(); i++){
                    JSONArray tmpR = itemRows.getJSONArray(i);
                    Log.v("TestJSON","i=" + i + " value=" + tmpR.toString());
                    // Loop over each row
                    Log.v("TestJSON","tmpR.length=" + tmpR.length());
                    for(int j=0; j<tmpR.length(); j++){
                        String tmpC = tmpR.get(j).toString();
                        output[i][j] = tmpC;
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我建议您使用Retrofit2 来查询您的服务器。它是使用率最高的 Android 库之一。然后,您可以使用 AndroidStudio 的 JsonSchemaToPojo 插件将您的 JSON 转换为 Java 对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-10-12
        • 1970-01-01
        相关资源
        最近更新 更多