由于前段时间项目中处理了许多关于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