You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发JSON操作应用:如何从final.json读取指定字段到单选按钮?

解决方案:从final.json提取指定字段并展示到单选按钮

嘿,我来帮你搞定这个问题!要实现只读取final.json里的name、date、time字段并展示到单选按钮,咱们可以按照以下步骤来操作:

第一步:读取final.json文件内容

首先得把final.json里的内容读成字符串,假设你的final.json放在Android项目的assets目录下(如果是存储在外部存储,逻辑类似,只是读取路径不同),可以用下面的方法读取:

private String readFinalJsonFromAssets() {
    StringBuilder stringBuilder = new StringBuilder();
    try {
        InputStream inputStream = getAssets().open("final.json");
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            stringBuilder.append(line);
        }
        bufferedReader.close();
        inputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return stringBuilder.toString();
}

第二步:解析JSON,提取指定字段

接下来解析读取到的JSON字符串,只提取我们需要的name、date、time字段。这里提供两种方式:

方式一:使用原生JSON API(无需第三方库)

如果final.json的结构是一个包含多条记录的JSON数组(比如[{"name":"张三", "date":"2024-05-20", "time":"14:30"}, ...]),可以这样解析:

private List<Map<String, String>> extractTargetFields(String jsonString) {
    List<Map<String, String>> recordList = new ArrayList<>();
    try {
        JSONArray jsonArray = new JSONArray(jsonString);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Map<String, String> record = new HashMap<>();
            // 只提取需要的字段,不存在的话可以设默认值或者跳过
            record.put("name", jsonObject.optString("name", "未知名称"));
            record.put("date", jsonObject.optString("date", "未知日期"));
            record.put("time", jsonObject.optString("time", "未知时间"));
            recordList.add(record);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return recordList;
}

方式二:使用Gson库(更简洁)

如果你已经引入了Gson库(在build.gradle里添加implementation 'com.google.code.gson:gson:2.10.1'),可以先创建一个只包含目标字段的实体类:

public class FinalRecord {
    private String name;
    private String date;
    private String time;

    // 生成getter方法
    public String getName() { return name; }
    public String getDate() { return date; }
    public String getTime() { return time; }
}

然后用Gson解析:

private List<FinalRecord> extractTargetFieldsWithGson(String jsonString) {
    Gson gson = new Gson();
    Type listType = new TypeToken<List<FinalRecord>>(){}.getType();
    return gson.fromJson(jsonString, listType);
}

Gson会自动忽略实体类中不存在的字段,完美符合我们只提取指定字段的需求。

第三步:将字段展示到单选按钮

假设你在布局里有一个RadioGroup(比如id是rg_records),我们可以动态生成RadioButton并添加进去,把每个记录的name、date、time组合成按钮文本:

private void setupRadioButtons(List<?> recordList) {
    RadioGroup radioGroup = findViewById(R.id.rg_records);
    radioGroup.removeAllViews(); // 先清空原有按钮

    for (Object record : recordList) {
        RadioButton radioButton = new RadioButton(this);
        String buttonText;
        if (record instanceof Map) {
            Map<String, String> map = (Map<String, String>) record;
            buttonText = String.format("姓名:%s | 日期:%s | 时间:%s", map.get("name"), map.get("date"), map.get("time"));
        } else if (record instanceof FinalRecord) {
            FinalRecord finalRecord = (FinalRecord) record;
            buttonText = String.format("姓名:%s | 日期:%s | 时间:%s", finalRecord.getName(), finalRecord.getDate(), finalRecord.getTime());
        } else {
            buttonText = "无效记录";
            continue;
        }
        radioButton.setText(buttonText);
        radioGroup.addView(radioButton);
    }
}

最后,在Activity的onCreate里串联起来

把上面的方法整合到onCreate中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout);

    // 读取JSON
    String jsonContent = readFinalJsonFromAssets();
    // 提取字段(选一种方式即可)
    List<Map<String, String>> records = extractTargetFields(jsonContent);
    // 或者用Gson的方式:List<FinalRecord> records = extractTargetFieldsWithGson(jsonContent);
    // 设置单选按钮
    setupRadioButtons(records);
}

这样就能实现只读取final.json里的指定字段,并且把每条记录的信息展示在单选按钮里啦!如果你的final.json结构不是数组,而是单个对象或者其他结构,只需要调整解析部分的代码就行~

内容的提问来源于stack exchange,提问作者Manu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:45:33