Android本地Json配置文件实现笔记

简述

开发中不可避免会遇到这样的需求,通过json作为配置文件配置app(比如本地数据库的构建等)。

1.Json格式

假设有这样一个需求:作为配置文件,我们设计了几种奖品用于用户抽奖。
以一个一般的Json格式为例:

{
  "filed": true,      //配置参数,本例不用只做示范
  "rewards": [         //奖品列表
    {
      "name": "脆脆鲨",           //奖品名称
      "probability": "0.35",     //中奖概率
      "image_res": 1,            //奖品icon
      "reward_serial": "21313133"//奖品serial,用于api请求等
    },
    {
      "name": "东方神牛",
      "probability": "0.45",
      "image_res": 2,
      "reward_serial": "21313134"
    },
    {
      "name": "旺仔牛奶",
      "probability": "0.2",
      "image_res": 3,
      "reward_serial": "21313135"
    }
  ]
}

2.序列化

为了更清楚的描述,我们创建一个Reward类,用来表示这些奖品对象

public class Reward {
    public String name;
    public float probability;
    public int imageResource;
    public String serial;

    public Reward(String name, float probability, int imageResource, String rewardSerial) {
        this.name = name;
        this.probability = probability;
        this.imageResource = imageResource;
        this.Serial = rewardSerial;
    }
}

接下来就可以解析json配置文件然后序列化为JsonObject了。

//获取json数据
 String rewardJson = "";
 String rewardnJsonLine;
 //assets文件夹下json文件的路径->打开json文件
 BufferedReader bufferedReader = new BufferedReader(newInputStreamReader(context.getAssets().open("db/reward.json")));
 while ((rewardJsonLine = bufferedReader.readLine()) != null) {
     rewardJson += rewardJsonLine;
 }

//序列化json数据
 JSONObject jsonObject = new JSONObject(rewardJson);
 boolean filed = jsonObject.getBoolean("filed"); //获得配置参数
 JSONArray rewards = jsonObject.getJSONArray("rewards");//获得奖品列表

//获得序列化的奖品集合
ArrayList<Reward> list = new ArrayList<>();
//遍历jsonArray,将每个JsonObject转换为对应的Reward对象
for (int i = 0, length = rewards.length(); i < length; i++) {
     JSONObject o = rewards.getJSONObject(i);
     Reward reward = new Reward(o.getString("name"),
             Float.parseFloat(String.valueOf(o.getString("probability"))),
             o.getInt("image_res"),
             o.getString("reward_serial")
     );
     probability += reward.probability;
     list.add(reward);
}
//接下来就可以处理这些对象了(比如操作数据库,比如通过概率进行抽奖等等)~
  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值