json数据解析

由于前段时间项目中处理了许多关于json的数据,而且json数据在当前的项目中频繁的出现,它是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。因此总结一下json的用法是有必要的。

首先引入json依赖:

                
			com.alibaba
			fastjson
			1.2.41
		

java 处理json String

             String timod006 = ""; //首先接入一个json字符串,通常来讲从某个接口接数据,或者传入一个jsonString 字符串
            JSONArray temp2 =JSON.parseArray( timod006 ); //将jsonString 转化成一个jsonArray
            ArrayList> list  = new ArrayList(  );           
             //解析这个json字符串,有些是标准的json字符串,可以直接转成dataframe,若是非标准的字符串,有些字符串出现了null,并且           
             //没有这个字段的的名字,会出现异常,因此使用这个方式能够保证将你需要非字段全部取出来
             for (int j =0;j map  = new HashMap <>(  ); 
			 JSONObject myObject = temp2.getJSONObject( j ); 
			 String gzbh = myObject.getString("gzbh"); 
			 String ljth = myObject.getString("ljth"); 
			 map.put("gzbh", gzbh); 
			 map.put("ljth", ljth); 
			 list.add( map );            
			 }           
			 //将ArrayList转化jsonString  
			 String jsonString  = JSON.toJSONString(list, SerializerFeature.BeanToArray); 
			 //再将标准的jsonSting转化成List(String) 
			 List  listtimod006 = JSONObject.parseArray( JSONArray.parseArray( jsonString ).toJSONString(), String.class ); 
			 //接着将通过并行化处理得到JavaRDD  
			 JavaRDD  rddtimod006 = javaSparkContext.parallelize( listtimod006 ); 
			 //最后得到dataframe
			 DataFrame df_bomtimod006 = hiveContext.read().json( rddtimod006 );

scala 处理json
结构化版

                       val temp = new JSONObject(string)
			val temp2 = temp.getJSONArray("content")
			val sc = InitSpark.getSC    
			val df_bom_before = hiveContext.read.json(sc.makeRDD(Seq(temp2.toString))) //获取到接口数据,并转换成dataframe

非结构化版本

                        val list1 =  List("","")
			 val list = new util.ArrayList[Any]() 
			 for (i <-  0 until list1.size) {  
			 val temp1 = HttpsRequest.getHttpsRequest(list1(i))
			 val string1 = StringUtils.removeStart(temp1.toString, "[") 
			 val string2 = StringUtils.removeEnd(string1, "]")
			 val temp2 = new JSONObject(string2) 
			 
			 val map = new util.HashMap[String, Any]()
			 val gzbh = temp2.getString("gzbh") 
			 val ljth = temp2.getString("ljth")
			 var dsca4 = " "      
			 if (temp2.has("dsca4")) { 
			 dsca4 = temp2.getString("dsca4") 
			 }else { 
			 dsca4 = null    
			 }     
			 map.put("gzbh", gzbh)
			 map.put("ljth", ljth)
			 map.put("dsca4", dsca4) 
			 list.add(map)    
			 }    
			 val jsonString = JSON.toJSONString(list,SerializerFeature.BeanToArray) //,SerializerFeature 
			 val sc = InitSpark.getSC 
			 val hiveContext = InitSpark.getHiveContext 
			 val df_bom = hiveContext.read.json(sc.makeRDD(Seq(jsonString)))    //获取到接口数据,并转换成dataframe

你可能感兴趣的:(json数据解析)