本文目錄一覽:
如何解析返回的json格式數據
json數據格式解析我自己分為兩種;
一種是普通的,一種是帶有數組形式的;
普通形式的:
服務器端返回的json數據格式如下:
複製代碼代碼如下:
{“userbean”:{“Uid”:”100196″,”Showname”:”\u75af\u72c2\u7684\u7334\u5b50″,”Avtar”:null,”State”:1}}
分析代碼如下:
複製代碼代碼如下:
// TODO 狀態處理 500 200
int res = 0;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200) {
/*
* 當返回碼為200時,做處理
* 得到服務器端返回json數據,並做處理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = “”;
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i(“cat”, “” + builder.toString());
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject(“userbean”);
String Uid;
String Showname;
String Avtar;
String State;
Uid = jsonObject.getString(“Uid”);
Showname = jsonObject.getString(“Showname”);
Avtar = jsonObject.getString(“Avtar”);
State = jsonObject.getString(“State”);
帶數組形式的:
服務器端返回的數據格式為:
複製代碼代碼如下:
{“calendar”:
{“calendarlist”:
[
{“calendar_id”:”1705″,”title”:”(\u4eb2\u5b50)ddssd”,”category_name”:”\u9ed8\u8ba4\u5206\u7c7b”,”showtime”:”1288927800″,”endshowtime”:”1288931400″,”allDay”:false},
{“calendar_id”:”1706″,”title”:”(\u65c5\u884c)”,”category_name”:”\u9ed8\u8ba4\u5206\u7c7b”,”showtime”:”1288933200″,”endshowtime”:”1288936800″,”allDay”:false}
]
}
}
分析代碼如下:
複製代碼代碼如下:
// TODO 狀態處理 500 200
int res = 0;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200) {
/*
* 當返回碼為200時,做處理
* 得到服務器端返回json數據,並做處理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = “”;
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i(“cat”, “” + builder.toString());
/**
* 這裡需要分析服務器回傳的json格式數據,
*/
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject(“calendar”);
JSONArray jsonArray = jsonObject.getJSONArray(“calendarlist”);
for(int i=0;ijsonArray.length();i++){
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
CalendarInfo calendarInfo = new CalendarInfo();
calendarInfo.setCalendar_id(jsonObject2.getString(“calendar_id”));
calendarInfo.setTitle(jsonObject2.getString(“title”));
calendarInfo.setCategory_name(jsonObject2.getString(“category_name”));
calendarInfo.setShowtime(jsonObject2.getString(“showtime”));
calendarInfo.setEndtime(jsonObject2.getString(“endshowtime”));
calendarInfo.setAllDay(jsonObject2.getBoolean(“allDay”));
calendarInfos.add(calendarInfo);
}
總結,普通形式的只需用JSONObject ,帶數組形式的需要使用JSONArray 將其變成一個list。
Android studio在logcat中打印日誌json顯示不全的問題解決方案
問題:android studio的logcat中一次打印的數據有4M(4*1024k)的顯示,如果json中的數據大於這個限制,就會顯示不全。
解決方案:
導出日誌查看,這裡推薦一種使用notepad++查看的方式:
如何關聯json格式的數據
思路:把你的json首先需要找到分割,比如你的字段之間的分隔符、json之間的分隔符
參考這個例子嘗試下:
CREATE TABLE login_struct (
ip STRING,
user structuid:bigint,name:string
)
PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’
COLLECTION ITEMS TERMINATED BY ‘|’
MAP KEYS TERMINATED BY ‘:’
STORED AS TEXTFILE;
複製代碼
user是一個struct,分別包含用戶uid和用戶名。
輸出hive表對應的數據
printf “%s,%s|%s|\n” 192.168.1.1 3105007010 blue login_struct.txt
printf “%s,%s|%s|\n” 192.168.1.2 3105007012 ggjucheng login_struct.txt
login_struct.txt的內容:
# cat login_struct.txt
192.168.1.1,3105007010,wow:10|cf:1|qqgame:2
192.168.1.2,3105007012,wow:20|cf:21|qqgame:22
加載數據到hive表
LOAD DATA LOCAL INPATH ‘/home/hadoop/login_struct.txt’ OVERWRITE INTO TABLE login_struct PARTITION (dt=’20130101′);
查看數據
select ip,user from login_struct where dt=’20130101′;
192.168.1.1 {“uid”:3105007010,”name”:”blue”}
192.168.1.2 {“uid”:3105007012,”name”:”ggjucheng”}
使用struct
select ip,user.uid,user.name from login_map where dt=’20130101′;
你嘗試下這樣
select ip,user.uid,user.name from login_map where user.uid=’x’;
JSON必知必會
1、JSON基於JavaScript對象字面量
所謂字面量,是對數據值的具體表示。它的字面意思與其想要表達的意思是完全一致的。
2、名稱-值對
計算機世界裡,名稱-值對也被稱為鍵-值對、屬性-值對或字段-值對,它們都表示一個意思。
3、正確的JSON語法
示例:
4、JSON文件使用.json 拓展名
5、JSON媒體類型是application/json
1、對象數據類型
JSON中的對象數據類型非常簡單。追根溯源,JSON本身就是對象,也就是被花括號包裹的名稱-值對的列表。對象可以嵌套。
2、字符串類型
簡單的字符串類型,比如前面提到的”cat”我就不多說了 ,下面重點講一下稍微複雜一點的。在這之前,我覺得有必要說一下解析器是如何讀JSON
的。對於解析器來說,當一個值以雙引號(”)開始時,它希望接下來的字符串文本以另一個雙引號結尾。這意味着這段字符串本身包含
雙引號可能會出錯。我不知道你是否理解我的意思,我們看一個例子吧:
3、數字類型
4、布爾類型
5、null類型
6、數組類型
JSON中的數組類型呢也是一個比較重要的類型,上面用的不多的我就不細說,你記住就好。廢話不多說,先來看一個例子吧:
1、跨站請求偽造CSRF:
拓展一下:
頂層JSON數組指存在於JSON名稱-至對之外的位於文檔最頂層的JSON數組
2、跨站腳本攻擊XSS
3、安全漏洞:決策上的失誤
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/300886.html