当前位置:编程学习 > wap >>

新手求助!如何提取出自己想要的JSON格式化数据

我用别人写的授权分享代码,现在想从授权用户资料中单独提取出比如"name:"\"id:"等信息,该如何处理?
GetInfoActivity.java:

/**
 * 
 * 功能描述:获取用户资料
 * 
 * 启动页面时传递一个int类型的字段type,用于标记获取自己的资料(type = 0)还是别人的资料(type = 1)。
 * 如果尝试获取别人的资料,示例代码会获取不同平台Share SDK的官方帐号的资料。
 * 
 * 如果资料获取成功,会通过{@link ShowInforPage}展示
 */
public class GetInforActivity extends Activity implements Callback,
OnClickListener, WeiboActionListener {

// 定义标题栏布局对象
private TitleLayout llTitle;

private Button sinaBt, renrenBt, qzoneBt, tengxunBt;

private Handler handler;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

handler = new Handler(this);

setContentView(R.layout.activity_userinfo);

initView();

initData();

}

/**
 * 初始化组件
 */
private void initView() {
// 得到标题栏对象
llTitle = (TitleLayout) findViewById(R.id.llTitle);

// 得到按钮对象
sinaBt = (Button) findViewById(R.id.btnSw);
renrenBt = (Button) findViewById(R.id.btnRr);
qzoneBt = (Button) findViewById(R.id.btnQz);
tengxunBt = (Button) findViewById(R.id.btnTc);

}

/**
 * 初始化数据
 */
private void initData() {
// 标题栏设置返回按钮监听
llTitle.getBtnBack().setOnClickListener(this);
// 设置标题栏的标题文本
llTitle.getTvTitle().setText(R.string.get_my_info);

// 设置监听
sinaBt.setOnClickListener(this);
renrenBt.setOnClickListener(this);
qzoneBt.setOnClickListener(this);
tengxunBt.setOnClickListener(this);
}

/**
 * 点击按钮获取授权用户的资料
 */
@Override
public void onClick(View v) {
if (v.equals(llTitle.getBtnBack())) {
finish();
return;
}

String name = null;

switch (v.getId()) {
case R.id.btnSw:
name = SinaWeibo.NAME;
break;
case R.id.btnTc:
name = TencentWeibo.NAME;
break;
case R.id.btnRr:
name = Renren.NAME;
break;
case R.id.btnQz:
name = QZone.NAME;
break;
}

if (name != null) {
AbstractWeibo weibo = AbstractWeibo.getWeibo(this, name);
weibo.setWeiboActionListener(this);
String account = null;

weibo.showUser(account);
}
}

public void onComplete(AbstractWeibo weibo, int action,
HashMap<String, Object> res) {
Message msg = new Message();
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);

Message msg2 = new Message();
msg2.what = 1;
JsonUtils ju = new JsonUtils();
String json = ju.fromHashMap(res);
msg2.obj = ju.format(json);
handler.sendMessage(msg2);
}

public void onError(AbstractWeibo weibo, int action, Throwable t) {
t.printStackTrace();

Message msg = new Message();
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}

public void onCancel(AbstractWeibo weibo, int action) {
Message msg = new Message();
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = weibo;
handler.sendMessage(msg);
}

/** 处理操作结果 */
public boolean handleMessage(Message msg2) {
switch (msg2.what) {
case 1: {
Intent i = new Intent(this, ShowInforActivity.class);
i.putExtra("data", String.valueOf(msg2.obj));
startActivity(i);
}
break;
default: {
AbstractWeibo weibo = (AbstractWeibo) msg2.obj;
String text = MainActivity.actionToString(msg2.arg2);
switch (msg2.arg1) {
case 1: { // 成功
text = weibo.getName() + " completed at " + text;
}
break;
case 2: { // 失败
text = weibo.getName() + " caught error at " + text;
}
break;
case 3: { // 取消
text = weibo.getName() + " canceled at " + text;
}
break;
}

Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
break;
}
return false;
}
}

JSONUtils.java:
 *	功能描述:这是一个简易的Json-HashMap转换工具,可以将普通的json数据(字符串)
 * 转换为一个HashMap<Srting, Object>表格,也可以反过来操作。此外还支
 * 持将json数据格式化。
 */
public class JsonUtils {

/**
 * 将指定的json数据转成 HashMap<String, Object>对象
 */
public HashMap<String, Object> fromJson(String jsonStr) {
try {
if (jsonStr.startsWith("[")
&& jsonStr.endsWith("]")) {
jsonStr = "{\"fakelist\":" + jsonStr + "}";
}

JSONObject json = new JSONObject(jsonStr);
return fromJson(json);
} catch (Throwable t) {
t.printStackTrace();
}
return new HashMap<String, Object>();
}

private HashMap<String, Object> fromJson(JSONObject json) throws JSONException {
HashMap<String, Object> map = new HashMap<String, Object>();
@SuppressWarnings("unchecked")
Iterator<String> iKey = json.keys();
while(iKey.hasNext()) {
String key = iKey.next();
Object value = json.opt(key);
if (JSONObject.NULL.equals(value)) {
value = null;
}
if (value != null) {
if (value instanceof JSONObject) {
value = fromJson((JSONObject)value);
}
else if (value instanceof JSONArray) {
value = fromJson((JSONArray)value);
}
map.put(key, value);
}
}
return map;
}

private ArrayList<Object> fromJson(JSONArray array) 
throws JSONException {
ArrayList<Object> list = new ArrayList<Object>();
for (int i = 0, size = array.length(); i < size; i++) {
Object value = array.opt(i);
if (value instanceof JSONObject) {
value = fromJson((JSONObject)value);
}
else if (value instanceof JSONArray) {
value = fromJson((JSONArray)value);
}
list.add(value);
}
return list;
}

/**
 * 将指定的HashMap<String, Object>对象转成json数据 
 */
public String fromHashMap(HashMap<String, Object> map) {
try {
return getJSONObject(map).toString();
} catch (Throwable t) {
t.printStackTrace();
}
return "";
}

@SuppressWarnings("unchecked")
private JSONObject getJSONObject(HashMap<String, Object> map) 
throws JSONException {
JSONObject json = new JSONObject();
for (Entry<String, Object> entry : map.entrySet()) {
Object value = entry.getValue();
if (value instanceof HashMap<?, ?>) {
value = getJSONObject((HashMap<String, Object>)value);
}
else if (value instanceof ArrayList<?>) {
value = getJSONArray((ArrayList<Object>)value);
}
json.put(entry.getKey(), value);
}
return json;
}

@SuppressWarnings("unchecked")
private JSONArray getJSONArray(ArrayList<Object> list) 
throws JSONException {
JSONArray array = new JSONArray();
for (Object value : list) {
if (value instanceof HashMap<?, ?>) {
value = getJSONObject((HashMap<String, Object>)value);
}
else if (value instanceof ArrayList<?>) {
value = getJSONArray((ArrayList<Object>)value);
}
array.put(value);
}
return array;
}

/**
 * 格式化一个json串
 */
public String format(String jsonStr) {
try {
return format("", fromJson(jsonStr));
} catch (Throwable t) {
t.printStackTrace();
}
return "";
}

@SuppressWarnings("unchecked")
private String format(String sepStr, HashMap<String, Object> map) {
StringBuffer sb = new StringBuffer();
sb.append("{\n");
String mySepStr = sepStr + "\t";
int i = 0;
for (Entry<String, Object> entry : map.entrySet()) {
if (i > 0) {
sb.append(",\n");
}
sb.append(mySepStr).append('\"').append(entry.getKey()).append("\":");
Object value = entry.getValue();
if (value instanceof HashMap<?, ?>) {
sb.append(format(mySepStr, (HashMap<String, Object>)value));
}
else if (value instanceof ArrayList<?>) {
sb.append(format(mySepStr, (ArrayList<Object>)value));
}
else if (value instanceof String) {
sb.append('\"').append(value).append('\"');
}
else {
sb.append(value);
}
i++;
}
sb.append('\n').append(sepStr).append('}');
return sb.toString();
}

@SuppressWarnings("unchecked")
private String format(String sepStr, ArrayList<Object> list) {
StringBuffer sb = new StringBuffer();
sb.append("[\n");
String mySepStr = sepStr + "\t";
int i = 0;
for (Object value : list) {
if (i > 0) {
sb.append(",\n");
}
sb.append(mySepStr);
if (value instanceof HashMap<?, ?>) {
sb.append(format(mySepStr, (HashMap<String, Object>)value));
}
else if (value instanceof ArrayList<?>) {
sb.append(format(mySepStr, (ArrayList<Object>)value));
}
else if (value instanceof String) {
sb.append('\"').append(value).append('\"');
}
else {
sb.append(value);
}
i++;
}
sb.append('\n').append(sepStr).append(']');
return sb.toString();
}
}

ShowInfoActivity.java
 *	功能描述:显示用户信息资料
 */
public class ShowInforActivity  extends Activity implements OnClickListener {
private TitleLayout llTitle;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_userinfo);

llTitle = (TitleLayout) findViewById(R.id.llTitle);
llTitle.getBtnBack().setOnClickListener(this);
llTitle.getTvTitle().setText("用户资料");

TextView tvJson = (TextView) findViewById(R.id.tvJson);
tvJson.setText(getIntent().getStringExtra("data"));
}
@Override
public void onClick(View v) {
if (v.equals(llTitle.getBtnBack())) {
finish();
}
}
}


这是输出结果的截图,比如我现在要设置一个文本框,只需显示用户资料里面的"locaton:""湖北 武汉"的信息,该怎么做呢? Android JSON Java --------------------编程问答--------------------

var info=JSON.parse(json)
alert(info.location)
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,