android 解析jsonjson encode 二维数组组

Android中使用Gson解析JSON数据的两种方法
转载 & & 作者:
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。 第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。 Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。 1) 并列的数据之间用逗号(",")分隔。 2) 映射用冒号(":")表示。 3) 并列数据的集合(数组)用方括号("[]")表示。 4) 映射的集合(对象)用大括号("{}")表示。 在Android中可以使用Gson解析JSON数据 首先,从 code.google.com/p/google-gson/downloads/list下载GsonAPI: google-gson-1.7.1-release.zip 把gson-1.7.jar copy到libs(项目根目录新建一个libs文件夹)中。 可以使用以下两种方法解析JSON数据: 通过获取JsonReader对象解析JSON数据:
代码如下: 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()方法获取一个对象数组进行操作: 创建JSON数据对应的一个POJO对象User.java:
代码如下: public class User { private S private int userI public String getUsername() {
} public void setUsername(String username) { this.username = } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } }
使用Gson对象获取User对象数据进行相应的操作:
代码如下: 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()); }
如果要处理的JSON字符串只包含一个JSON对象,则可以直接使用fromJson获取一个User对象:
代码如下: String jsonData = "{\"username\":\"arthinking\",\"userId\":001}"; Gson gson = new Gson(); User user = gson.fromJson(jsonData, User.class); System.out.println(user.getUsername()); System.out.println(user.getUserId());
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具09:21 提问
C# json如何转二维数组
{[["a","b","c"],["x","y","z"]]} 这样的json转成二维数组或者datatable
按赞数排序
遍历获取json中的值,然后向二维数组中插入数据不就可以了吗?难道你想直接转换的方法?
如楼上所述,没有现成封装好的方法,自己写一个呗,那是相当简单啊
c# 解析JSON的几种办法
可以参考这个
上边那个连接里边说的不错,推荐你试试序列化!
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐3575人阅读
android开发日记(65)
今天是2017年第一天。不禁感叹时间过的真的快。2016还没好好的感受就过去了。
下面来说下二维数组动态赋值。
一开始我也觉得这有什么难的,但确实在我做的时候难倒我了。我真的菜了。
需求:根据json解析过来的数据,赋值给二维数据。(注:这里的行数是知道的)
private String[][]
citys = new String[jsonArray.length()][];
for (int i = 0; i & jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
JSONArray cityArrJson = jsonObject.getJSONArray(&city&);
String[] citysCol = new String[cityArrJson.length()];
for(int n = 0; n&cityArrJson.length();n++){
JSONObject cityObject = cityArrJson.getJSONObject(n);
citysCol[n] = cityObject.getString(&name&);
citys[i] = citysC
原理:二维数组是由一维数组组成的
有问题,或者需要做功能加我他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Json解析数组实例
JsonCPP简介
jsoncpp是c++解析JSON串常用的解析库之一。其常用的类有:
Json::Value
可以表示里所有的类型,比如int,string,object,array等,其支持的类型可以参考Json:ValueType中的值。
Json::Reader
将json文件流或字符串解析到Json::Value,主要函数有Parse。
Json::Writer
与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。
Json::Value::Members 主要用于以STL风格解析JSON数组。看过源代码的人已知道,Members其实是typedefvector而已。
JSONCPP解析示例
解析JSON串格式
"JsonID": "BD6D7FDA-54D2-468b-A3DE-9D5FBDB78207",
"ID": "B8E09E97-F379-4bb0-814A-389FD3F66631",
"Items": [
"Count": 2,
"Code": "0101",
"Count": 2,
"Code": "0101",
生成的JSON串
"ActualCount": 2,
"Code": "0101"
"ActualCount": 2,
"Code": "0101"
"JsonID": "BD6D7FDA-54D2-468b-A3DE-9D5FBDB78207"
解析、生成JSON代码
需要引入的.h文件
[html] view
#pragma once
#pragma comment(lib, "json_71_libmtd.lib")
#include "json/json.h"
[cpp] view
void CJSONTestDlg::OnBnClickedButton1()
CEdit* pEdit =(CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->GetWindowText(str); //str即为a)中定义的JSON串
pEdit->FmtLines(true);
if (reader.parse(WC2UT(str.GetBuffer(0)), root))
// reader将Json字符串解析到root,root将包含Json里所有子元素
std::string JsonID = root["JsonID"].asString();
Json::Value rtnR
rtnRoot["JsonID"]=JsonID;
Json::Value send = root["Send"];
if(!send["Items"].isNull()){
Json::Value Items = send["Items"];
int sendSize = Items.size();
for(int i=0;i<sendSi&#43;&#43;){//循环获取到JSON串数组当中的&#20540;
std::string
Code = Items[i]["Code"].asString();
int x = Items[i]["X"].asInt();
int y = Items[i]["Y"].asInt();
int count = Items[i]["Count"].asInt();
//更具读到的JSON串中的&#20540;生成所需内容
Json::Value newAckI
newAckItem["Code"]=C
newAckItem["ActualCount"]=
ack.append(newAckItem);
rtnRoot["Ack"]=
std::string rtnOut = rtnRoot.toStyledString();//生成带&#26684;式的JSON串
#ifdef UNICODE
std::wstring stemp = s2ws(rtnOut);
LPCWSTR result = stemp.c_str();
LPCWSTR result = rtnOut.c_str();
MessageBox(result,_T("根据JSON串,生成的对应JSON串信息"));
CEdit* pEdit =(CEdit*)GetDlgItem(IDC_EDIT2);
pEdit->SetWindowText(result);
CEdit* pRtnEdit =(CEdit*)GetDlgItem(IDC_EDIT2);
pRtnEdit->SetWindowText(_T("JSON&#26684;式错误"));
将JSONCPP以静态库方式导入,需要注意项目中的代码生成中的运行库,和JSONCPP的静态库项目的代码生成的运行库要一致,否则将报如下错误
afxver_.h(81): fatal error C1189: #error :
Please use the /MD switch for _AFXDLL builds
项目中的Runtime Library需设置的一样

我要回帖

更多关于 php 二维数组转json 的文章

 

随机推荐