项目开发之JSON读取

2 篇文章 0 订阅
1 篇文章 0 订阅

**

~~json求取多重数组嵌套中对象的值~

**
首先先给大家看一下我项目拿到的json格式在这里插入图片描述看上去有木有感觉到很复杂,数组不仅有没有键的值还有对象,这种混合型数据每次都需要拿出一条数据来使用,如果光把数据显示出来那很容易,主要还需要单独应用,这可愁坏了我这种刚入门的it工作者。.
我当时想到的办法就是将对象转换为map,然后将数组中没有键的对象放到list中,list中嵌套map将数据return出去虽然可以实现将每个值单独取出来但是这种方式有有很多弊端,比如如果获取的list需要通过下标去获取值,那样很难保证数据的可变性。
最后想到的办法是使用实体类进行实现
在这里插入图片描述
这是我定的json总体的实体类,但是数组中的数据才是硬伤,随后我又特地为json数组中做了一个实体类。放入list中在这里插入图片描述
将数组中可变的元素和没有键的元素也统统加了进去,现在万事俱备只欠数据啦。接下来就是从json中取出数据。
由于我的json文件有很多而且需要全部实现,我就先做了一个检索工具,检索特定文件夹下的所有文件路径,把检索到的路径遍历出来进行json提炼

	public static String readFile(String fileName) {

		//log.info("start");
		String jsonStr = "";

        try {
            File jsonFile = new File(fileName);
            checkFile(jsonFile);
            FileReader fileReader = new FileReader(jsonFile);
            FileInputStream input = new FileInputStream(jsonFile);
            Reader reader = new InputStreamReader(input, CHARSET.toString());
            int ch = 0;
            StringBuffer sb = new StringBuffer();
            while ((ch = reader.read()) != -1) {
                sb.append((char) ch);
            }

            fileReader.close();
            reader.close();
            jsonStr = sb.toString();

        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        //log.info("end");
        return jsonStr;

    }

将json读出来之后其实和读那些txt呀什么的方式一样到最后都是转成了二进制字节流,将这些获取到的文本转换成JSON文件需要转换一下
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
现在就是json形式的数据了,如果只json只有对象可以通过
jsonObject.get(“键值”)获取数据,如果想获取数组可以通过jsonObject.getJSONArray(“数组键”)获取键值对应数组。
获取复杂的数据形式就要将这两种形式组合起来,接下来给大家分享,我通过实体类是如何获取负载的数据形式的。

	/**
 * JSON数据分离和获取
 * @paramjsonStr
 * @return
 * @Auther 西西
 */
	public static CloudWatchAPIParamJsonEntity jsonFileAnalysis(String jsonStr) {
	CloudWatchAPIParamJsonEntity jsonFile = new CloudWatchAPIParamJsonEntity();//json对应实体
	List<MetricsEntity> metricsEntityList = new ArrayList<MetricsEntity>();//json数组对应实体

    try {

        JSONObject jsonObject  = JSONObject.fromObject(jsonStr);

        //Json銈儢銈搞偋銈儓銇嬨倝闋呯洰銈掑彇寰椼仚銈�
        jsonFile.setServerType((String) jsonObject.get("serverType"));
        jsonFile.setAccessKey((String) jsonObject.get("accessKey"));
        jsonFile.setSecretKey((String) jsonObject.get("secretKey"));
        jsonFile.setNameSpace((String) jsonObject.get("nameSpace"));

        JSONArray  metricsList = jsonObject.getJSONArray("metrics");

        for (int i = 0 ; i < metricsList.size();i++){

        	MetricsEntity metricsEntity = new MetricsEntity();

        	JSONArray recode = metricsList.getJSONArray(i);

        	int count = recode.size();

        	//銉囥兗銈裤偒銈︺兂銉堛倛銈娿�併儜銈裤兗銉冲寲鍑︾悊銈掕銇嗐��
        	JSONObject property = new JSONObject();
        	switch(count){
    		  case 2:
    			  metricsEntity.setMetricsID(recode.getString(0));

                  property = (JSONObject)recode.get(1);
                  metricsEntity.setStatistics((String) property.get("statistics"));
                  metricsEntity.setPeriod((Integer) property.get("period"));
                  metricsEntity.setStartTime((String) property.get("startTime"));
                  metricsEntity.setEndTime((String) property.get("endTime"));
    			  break;
    		  case 4:
    			  metricsEntity.setMetricsID(recode.getString(0));
    			  metricsEntity.setDimensionsName1(recode.getString(1));
    			  metricsEntity.setDimensionsValue1(recode.getString(2));

      			  property = (JSONObject)recode.get(3);
      			  metricsEntity.setStatistics((String) property.get("statistics"));
      			  metricsEntity.setPeriod((Integer) property.get("period"));
      			  metricsEntity.setStartTime((String) property.get("startTime"));
      			  metricsEntity.setEndTime((String) property.get("endTime"));
      			  break;

    		  case 6:
    			  metricsEntity.setMetricsID(recode.getString(0));
    			  metricsEntity.setDimensionsName1(recode.getString(1));
    			  metricsEntity.setDimensionsValue1(recode.getString(2));
    			  metricsEntity.setDimensionsName2(recode.getString(3));
    			  metricsEntity.setDimensionsValue2(recode.getString(4));

      			  property = (JSONObject)recode.get(5);
      			  metricsEntity.setStatistics((String) property.get("statistics"));
      			  metricsEntity.setPeriod((Integer) property.get("period"));
      			  metricsEntity.setStartTime((String) property.get("startTime"));
      			  metricsEntity.setEndTime((String) property.get("endTime"));
                  break;

    		  default:
    			  return null;
    		}
        	metricsEntityList.add(metricsEntity);

        }

        jsonFile.setMetricsList(metricsEntityList);


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

    //log.info("end");
    return jsonFile;

}

将数据处理好之后就可以get实体类获取要用的值了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Unity中读取JSON数据,可以使用JsonUtility类。JsonUtility类可以将JSON数据转换成C#对象,也可以将C#对象转换成JSON数据。 以下是一个示例代码,演示如何使用JsonUtility类读取JSON数据: ```csharp using UnityEngine; using System.IO; public class JsonReader : MonoBehaviour { // JSON文件路径 public string jsonFilePath; // 定义一个表示JSON数据的类 [System.Serializable] public class JsonData { public string name; public int age; public string[] hobbies; } void Start() { // 读取JSON文件内容 string jsonContent = File.ReadAllText(jsonFilePath); // 将JSON数据转换成C#对象 JsonData jsonData = JsonUtility.FromJson<JsonData>(jsonContent); // 输出读取到的数据 Debug.Log("Name: " + jsonData.name); Debug.Log("Age: " + jsonData.age); Debug.Log("Hobbies: " + string.Join(", ", jsonData.hobbies)); } } ``` 在上面的示例代码中,我们首先定义了一个表示JSON数据的类JsonData。然后在Start函数中,我们使用File.ReadAllText方法读取JSON文件内容,并使用JsonUtility.FromJson方法将JSON数据转换成JsonData对象。最后,我们输出读取到的数据。 需要注意的是,在使用JsonUtility类时,C#对象的字段名必须与JSON数据中的键名一致,否则无法正确解析JSON数据。 ### 回答2: Unity是一款跨平台的游戏开发引擎,它可以方便地读取和解析JSON数据。在Unity中,我们可以使用C#的JsonUtility类来实现对JSON数据的读取。 首先,我们需要将JSON数据保存在Unity项目中的某个位置,比如在Assets文件夹下创建一个名为"Data"的文件夹,并将JSON文件放入其中。接下来,我们就可以使用JsonUtility来读取和解析JSON数据了。 首先,需要创建一个类来存储JSON数据的结构。假设我们有一个名为"PlayerInfo"的类来存储玩家信息: ```csharp [System.Serializable] public class PlayerInfo { public string playerName; public int playerScore; } ``` 接下来,在读取JSON数据的脚本中,我们可以使用JsonUtility类来读取和解析JSON数据。假设我们将JSON文件命名为"player.json",并放在"Data"文件夹中: ```csharp using UnityEngine; using System.IO; public class JSONReader : MonoBehaviour { void Start() { // 读取JSON文件的路径 string filePath = Path.Combine(Application.streamingAssetsPath, "Data/player.json"); // 读取JSON文件的内容 string json = File.ReadAllText(filePath); // 将JSON数据解析到PlayerInfo类的实例中 PlayerInfo playerInfo = JsonUtility.FromJson<PlayerInfo>(json); // 打印解析后的玩家信息 Debug.Log("Player Name: " + playerInfo.playerName); Debug.Log("Player Score: " + playerInfo.playerScore); } } ``` 以上就是使用Unity读取JSON数据的简单示例。需要注意的是,由于JSON文件在Unity的StreamingAssets文件夹中,因此在构建发布版本时,需要将JSON文件复制到构建目标的对应文件夹中,才能在运行时正确读取JSON数据。 ### 回答3: Unity是一个游戏开发引擎,可以用于创建各种类型的游戏。在Unity中读取JSON数据十分简单和方便。 首先,我们需要将JSON文件加载到游戏中。可以使用Unity的资源加载功能,将JSON文件添加为一个游戏资源,使其可以在游戏中访问。 一旦JSON文件加载到游戏中,我们可以使用JsonUtility类来解析JSON数据。JsonUtility类提供了一些静态方法,可以将JSON字符串转换成可以在Unity中使用的对象。 例如,我们可以使用JsonUtility.FromJson方法将JSON字符串转换成自定义的C#对象。只需传入JSON字符串和目标对象的类型作为参数,就可以得到解析后的对象。 有了解析后的对象,我们就可以通过访问其属性或字段来获取JSON中的数据。如果JSON特别复杂,我们也可以使用嵌套对象来表示JSON的层次结构。 另外,如果我们想将C#对象转换成JSON字符串,可以使用JsonUtility.ToJson方法。只需将目标对象作为参数传入,就可以得到相应的JSON字符串。 总的来说,Unity读取JSON非常简单,只需将JSON文件加载到游戏中,然后使用JsonUtility类来解析JSON数据即可。这样我们就可以轻松地在Unity中使用JSON数据了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值