Java&Android遍历JSON文件的数据

JSON文件存储在res/rwa/json.json目录下载,文件的特征,哈希值数字部分不一样,popup_rules每条都是一样的,根据哈希值遍历取出对应的popup_rules【比如哈希值-1835777899,遍历取出第一条数据的值。】

img

[
  {
    "-1835777899": "{\"popup_rules\":[{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"}]}"
  },
  {
    "-232323298": "{\"popup_rules\":[{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"}]}"
  },
  {
    "-645454266": "{\"popup_rules\":[{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"},{\"id\":\"ID值\",\"action\":\"action值\"}]}"
  }
]

【以下回答由 GPT 生成】

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

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

public class JsonFileReader {

    public static void main(String[] args) {
        try {
            String filename = "json.json";
            String hashValue = "-232323298";
            String popupRule = getPopupRuleFromJson(filename, hashValue);
            System.out.println("Popup Rule: " + popupRule);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String getPopupRuleFromJson(String filename, String hashValue) throws IOException {
        InputStream inputStream = JsonFileReader.class.getClassLoader().getResourceAsStream(filename);
        if (inputStream != null) {
            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            String json = new String(buffer, StandardCharsets.UTF_8);
            JSONArray jsonArray = new JSONArray(json);

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                if (jsonObject.has(hashValue)) {
                    String popupRulesJson = jsonObject.getString(hashValue);
                    JSONObject popupRulesObject = new JSONObject(popupRulesJson);
                    JSONArray popupRules = popupRulesObject.getJSONArray("popup_rules");
                    if (popupRules.length() > 0) {
                        JSONObject firstPopupRule = popupRules.getJSONObject(0);
                        return firstPopupRule.toString();
                    }
                }
            }
        }
        return null;
    }
}

这是一个Java代码示例,可根据给定的哈希值遍历json.json文件,并提取对应的popup_rules中的第一条数据。

  1. 首先,从给定的文件名("json.json")获取输入流,以便读取文件内容。
  2. 读取输入流中的数据,并将其转换为UTF-8编码的字符串。
  3. 将字符串解析为JSONArray对象,表示包含多个JSON对象的数组。
  4. 迭代JSONArray,对每个JSON对象执行以下操作:
  5. 检查JSON对象是否包含给定的哈希值字段。
  6. 如果包含,获取哈希值对应的值,并将其解析为JSONObject。
  7. 从JSONObject中获取名为"popup_rules"的JSON数组。
  8. 如果"popup_rules"数组的长度大于零,获取第一个元素并返回其字符串表示。
  9. 如果没有找到匹配的哈希值或popup_rules为空,返回null。

你可以在main方法中调用getPopupRuleFromJson方法,并传递文件名和所需的哈希值作为参数。然后,将打印出提取的popup_rules中的第一条数据。

请注意,此代码假设json.json文件位于项目的资源目录下,并通过类加载器获取。如果文件不在该位置,你需要相应修改文件路径的获取方式。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^