新手求助!如何提取出自己想要的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