json数据解析

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

首先引入json依赖:

                <dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.41</version>
		</dependency>

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<temp2.size();j++){
			 HashMap<String,String> 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
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值