『壹』 jsON 數字類型問題
從結構抄上看,所有的數據(data)最終都可以分解成三種類型:
第一種類型是標量(scalar),也就是一個單獨的字元串(string)或數字(numbers),比如"北京"這個單獨的詞。
第二種類型是序列(sequence),也就是若干個相關的數據按照一定順序並列在一起,又叫做數組(array)或列表(List),比如"北京,上海"。
第三種類型是映射(mapping),也就是一個名/值對(Name/value),即數據有一個名稱,還有一個與之相對應的值,這又稱作散列(hash)或字典(dictionary),比如"首都:北京"。
Json的規格非常簡單,只用一個頁面幾百個字就能說清楚,而且Douglas Crockford聲稱這個規格永遠不必升級,因為該規定的都規定了。
1) 並列的數據之間用逗號(", ")分隔。
2) 映射用冒號(": ")表示。
3) 並列數據的集合(數組)用方括弧("[]")表示。
4) 映射的集合(對象)用大括弧("{}")表示。
『貳』 如何使用JSON格式 POST數據到伺服器
1.JSON數據格式x0dx0aa)以最簡單的形式,您可以使用以下JSON來表示名稱/值對:x0dx0a{「姓」:「布雷特」}x0dx0aB)可以創建包含多個名稱/值對的記錄,例如:x0dx0a{「FiestNeX」:「布雷特」,「LaSTNED」:「McCurkLin」,「email」:「布雷特@ NeWistalist.com」}x0dx0ac)可以創建一個值數組x0dx0a{「人」):x0dx0a{「FiestNeX」:「布雷特」,「LaSTNED」:「McCurkLin」,「email」:「布雷特@ NeWistalist.com」,x0dx0a{「FiestNeX」:「傑森」、「ListNeNe」:「Hunter」、「email」:「傑森@ servlet。com」}x0dx0a] ]x0dx0ad)當然,可以使用相同的語法來表示多個值(每個值包含多個記錄):x0dx0a{「程序員」):x0dx0a{「FiestNeX」:「布雷特」,「LaSTNED」:「McCurkLin」,「email」:「布雷特@ NeWistalist.com」,x0dx0a{「FiestNeX」:「傑森」、「ListNeNe」:「Hunter」、「email」:「傑森@ servlet。com」}x0dx0a]x0dx0a「作者」:x0dx0a{姓〉:「艾薩克」、「姓氏」:「阿西莫夫」、「流派」:「科幻小說」,x0dx0a{「第一名字」:「TAD」、「姓氏」:「威廉姆斯」、「流派」:「幻想」}x0dx0a]x0dx0a「音樂家」:x0dx0a{「姓」:「埃里克」、「姓氏」:「克萊普頓」、「樂器」:「吉他」}x0dx0a]x0dx0a}x0dx0a請注意,在不同的主要條目(程序員、作者和音樂家)之間,記錄中的實際名稱/值對可能是不同的。JSON是完全動態的,允許在JSON結構的中間表示數據的方式。x0dx0a2。在JavaScript中使用JSONx0dx0aJSON是JavaScript原生格式,這意味著在JavaScript中處理JSON數據不需要任何特殊的API或工具包。x0dx0a2.1將JSON數據分配給變數x0dx0a例如,您可以創建一個新的JavaScript變數,並將其直接分配給JSON格式的數據字元串。x0dx0aVaR人=x0dx0a{「程序員」):x0dx0a{「FiestNeX」:「布雷特」,「LaSTNED」:「McCurkLin」,「email」:「布雷特@ NeWistalist.com」,x0dx0a{「FiestNeX」:「傑森」、「ListNeNe」:「Hunter」、「email」:「傑森@ servlet。com」}x0dx0a]x0dx0a「作者」:x0dx0a{姓〉:「艾薩克」、「姓氏」:「阿西莫夫」、「流派」:「科幻小說」,x0dx0a{「第一名字」:「TAD」、「姓氏」:「威廉姆斯」、「流派」:「幻想」}x0dx0a]x0dx0a「音樂家」:x0dx0a{「姓」:「埃里克」、「姓氏」:「克萊普頓」、「樂器」:「吉他」}x0dx0a]x0dx0a}x0dx0a2.2訪問數據x0dx0a將數組放入JavaScript變數後,可以很容易地訪問它。實際上,只使用點符號來表示數組元素。所以,如果你想訪問程序員列表的第一個條目,你只需要在JavaScript中使用下面的代碼:x0dx0a人。程序員(0)。x0dx0a注意,數組的索引從零開始。x0dx0a2.3修改JSON數據x0dx0a正如數據被訪問一樣,數據也可以以同樣的方式修改:x0dx0a人。音樂家[ 1 ]。姓氏=「Rachmaninov」;x0dx0a2.4轉換後串x0dx0aA)在JavaScript,這種轉換也非常簡單。x0dx0aString NejjStangeTeX= Posi.TjsString();x0dx0aB)可以將任何JavaScript對象轉換為JSON文本。而不是處理最初使用JSON字元串來分配值的變數。為了轉換名為MyObjor的對象,我們只需要執行相同的命令形式:x0dx0aString MyObjutsPixs= MyObjut.TjsString();x0dx0a說明:轉換後的字元串用作Ajax調用的字元串,以完成非同步傳輸。x0dx0a總結:如果您想處理大量的JavaScript對象,那麼JSON幾乎肯定是一個不錯的選擇,因此您可以輕松地將數據轉換成可以在請求中發送到伺服器端程序的格式。x0dx0a三。伺服器端JSONx0dx0a3.1向伺服器發送JSONx0dx0aa)通過get發送具有名稱/值對的JSONx0dx0a在JSON數據中,將有空格和各種字元。Web瀏覽器通常希望繼續編譯它們。為了確保這些字元不會在伺服器上造成混淆(或者在向伺服器發送數據的過程中),您需要在JavaScript的轉義()函數中執行以下操作:x0dx0aValueURL =「組織人」PHP?人=「+逃逸(人)tojSouthSnk());x0dx0aRequest.open(「獲取」,URL,TRUE);x0dx0a請求.OnRead狀態更改= UpDebug網頁;x0dx0aRequest.send(NULL);x0dx0aB)使用POST請求發送JSON數據x0dx0a當您決定使用POST請求將JSON數據發送到伺服器時,您不需要對代碼進行很多更改。x0dx0aValueURL =「組織人」PHP?時間戳=「+新日期())GetTime();x0dx0aRequest.open(「POST」,URL,TRUE);x0dx0a請求.OnRead狀態更改= UpDebug網頁;x0dx0aRequest.setRequestHeader(「內容類型」,「應用程序/ X-WWW格式- URLNECODE」);x0dx0aRequest.send(Posi.TjsSouthScript)x0dx0a注意:賦值的格式必須是var MSG=EVE(+(Req.ReffStEXT++))。x0dx0a3.2解釋伺服器上的JSONx0dx0aa)處理JSON的兩個步驟。x0dx0a對於用於編寫伺服器端程序的語言,可以找到相應的JSON解析器/工具箱/助手API。x0dx0a使用JSON解析器/工具箱/幫助器API從客戶端獲取請求數據,並將數據轉換成腳本可以理解的內容。x0dx0ab)尋找JSON解析器x0dx0a找到JSON解析器或工具箱的最佳資源是JSON站點。如果使用JavaServlet,JSON.org上的Or.JSON包是一個不錯的選擇。在這種情況下,您可以從JSON網站下載JSON.ZIP,並添加到項目生成目錄中包含的源文件。復合後
『叄』 android 怎麼看json數據格式
給服務端發送請求後,服務端會返回一連串的數據,這些數據在大部分情況下都是XML格式或者JSON格式。然後JSON相對XML來說解析相對方便一些,所以先說說JSON的解析。
JSON的基本數據格式有這幾種:
1.一個JSON對象——JSONObject
{"name":"胡小威" , "age":20 , "male":true}
2.一個JSON數組——JSONArray
[{"name":"胡小威" , "age":20 , "male":true},{"name":"趙小亮" , "age":22 , "male":false}]
3.復雜一點的JSONObject
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"嶽麓山南", "city":"長沙","country":"中國"}}
4.復雜一點的JSONArray
[
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"嶽麓山南", "city":"長沙","country":"中國"}},
{"name":"趙小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中國"}}
]
5.來個更復雜的,這是我從愛幫公交上扒取的數據
{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊專線(中南大學學生公寓-長沙火車站)","foot_dist":"362","stat_xys":"","stats":"嶽麓山南;湖南師大;二里半;嶽麓山北;市四醫院;華圖教育(太平街口);牛耳教育(南陽街口);韭菜園;曙光路口;長島路口;長沙火車站","end_stat":"長沙火車站","line_xys":"","line_dist":"7535","start_stat":"嶽麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-長沙火車站)","foot_dist":"337","stat_xys":"","stats":"嶽麓山南;湖南師大;二里半;嶽麓山北;市四醫院;華圖教育(太平街口);蔡鍔中路口;韭菜園;喬庄;曙光路口;長島路口;五一東村;車站路口;長沙火車站","end_stat":"長沙火車站","line_xys":"","line_dist":"7822","start_stat":"嶽麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
接下來是解析部分
一、直接解析
1.{"name":"胡小威" , "age":20 , "male":true}
Java代碼
public void parseJsonObject(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
//接下來該幹嘛幹嘛
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2.[{"name":"胡小威" , "age":20 , "male":true},{"name":"趙小亮" , "age":22 , "male":false}]
Java代碼
public void parseJSONArray(String json) {
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
//接下來該幹嘛幹嘛
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.{"name":"胡小威", "age"=20, "male":true, "address":{"street":"嶽麓山南", "city":"長沙","country":"中國"}}
Java代碼
public void parseJsonPerson(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
JSONObject addressJSON = jsonObject.getJSONObject("address");
String street = addressJSON.getString("street");
String city = addressJSON.getString("city");
String country = addressJSON.getString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4.
[
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"嶽麓山南", "city":"長沙","country":"中國"}},
{"name":"趙小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中國"}}
]
Java代碼
public void parseJsonArrayPerson(String json) {
List<Person> persons = new ArrayList<Person>();
try {
jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean male = jsonObject.getBoolean("male");
JSONObject addressJSON = jsonObject.getJSONObject("address");
String street = addressJSON.getString("street");
String city = addressJSON.getString("city");
String country = addressJSON.getString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
persons.add(person);
Log.v("juno", person.toString());
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.v("juno", persons.toString());
}
5. {"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊專線(中南大學學生公寓-長沙火車站)","foot_dist":"362","stat_xys":"","stats":"嶽麓山南;湖南師大;二里半;嶽麓山北;市四醫院;華圖教育(太平街口);牛耳教育(南陽街口);韭菜園;曙光路口;長島路口;長沙火車站","end_stat":"長沙火車站","line_xys":"","line_dist":"7535","start_stat":"嶽麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-長沙火車站)","foot_dist":"337","stat_xys":"","stats":"嶽麓山南;湖南師大;二里半;嶽麓山北;市四醫院;華圖教育(太平街口);蔡鍔中路口;韭菜園;喬庄;曙光路口;長島路口;五一東村;車站路口;長沙火車站","end_stat":"長沙火車站","line_xys":"","line_dist":"7822","start_stat":"嶽麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
Java代碼
public List<Salution> parseJSON(String str){
Log.d("返回的JSON數據:", str);
List<Salution> busList = new ArrayList<Salution>();
try {
JSONObject jsonObject = new JSONObject(str);
JSONObject busesJSON = jsonObject.getJSONObject("buses");
JSONArray busJSArray=busesJSON.getJSONArray("bus");
for(int i=0;i<busJSArray.length();i++){
JSONObject busJSObject = busJSArray.getJSONObject(i);
JSONObject segsJSObject=busJSObject.getJSONObject("segments");
JSONArray segJSArray=segsJSObject.getJSONArray("segment");
Salution st=new Salution();
for(int j=0;j<segJSArray.length();j++){
if(j==0){
JSONObject segJSObject = segJSArray.getJSONObject(j);
st.setLine_name1(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats1(segJSObject.getString("stats"));
st.setEnd_stat1(segJSObject.getString("end_stat"));
st.setStart_stat1(segJSObject.getString("start_stat"));
}
if(j==1){
JSONObject segJSObject = segJSArray.getJSONObject(j);
st.setLine_name2(segJSObject.getString("line_name"));
Log.d("line_name", segJSObject.getString("line_name"));
st.setStats2(segJSObject.getString("stats"));
st.setEnd_stat2(segJSObject.getString("end_stat"));
st.setStart_stat2(segJSObject.getString("start_stat"));
}
}
busList.add(st);
}
return busList;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
這里我只是簡單獲取了幾個我想要的數據。
二、使用JSON類庫Gson 來解析JSON
Gson 是 Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。可以將一個 JSON 字元串轉成一個 Java 對象,或者反過來。
首先,從 code.google.com/p/google-gson/downloads/list下載GsonAPI
Java代碼
google-gson-1.7.1-release.zip
再把gson-1.7.jar 到libs
可以使用兩種方法解析
①、通過獲取JsonReader對象解析JSON數據:
Java代碼
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
②、通過把JSON數據映射成一個對象,使用Gson對象的fromJson()方法獲取一個對象數組進行操作
Java代碼
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
我一般是採用直接解析,添加類庫神馬的最討厭了···
還有,抱怨一下,iteye的編輯弱爆了!!!
轉載
『肆』 JSON和JSON解析——快速玩轉多重嵌套的JSON數組——HiveSQL數據處理
在處理業務庫中的復雜JSON字元串時,理解JSON及其解析技巧變得尤為重要。JSON,全稱JavaScript Object Notation,是一種輕量級的數據交換格式,易於人閱讀和編寫,同時也便於機器解析。它基於JavaScript語言的一個子集,構建於兩種核心結構:對象和數組。
對象是由無序的鍵值對組成,以大括弧{}標識,每個鍵後跟冒號並用逗號分隔;數組則是有序的值集合,用中括弧[]表示,值之間同樣用逗號分隔。JSON的值可以是字元串、數字、布爾值、null、對象或數組,這些結構可以相互嵌套。例如,一個用戶瀏覽記錄可能包含多個手機信息,如手機型號和參數。
以SSSK手機公司的用戶行為數據為例,包含用戶ID和包含多層嵌套JSON的瀏覽記錄。其中,瀏覽記錄JSON可能長這樣:(使用在線JSON格式化工具查看)。處理這類數據,Hive SQL提供了幾種方法:一是利用json_tuple和正則函數,如regexp_extract;二是get_json_object配合正則表達式;三是get_json_object結合截斷函數。每個方法都有其適用場景和細節解析。
值得注意的是,不同數據處理引擎(如Hive、Spark和Presto)在執行復雜的解析腳本時可能會出現差異,可能影響數據結果。因此,在遇到復雜腳本時,建議多驗證數據,以確保正確解析並避免決策失誤。
『伍』 json 是什麼意思 能舉個實用的例子說明具體怎麼使用和含義
和map的格式一樣。是鍵值對的形式。是一種數據傳輸格式給視圖。數量量大的話還是不要選擇這種格式了。