『壹』 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的格式一样。是键值对的形式。是一种数据传输格式给视图。数量量大的话还是不要选择这种格式了。