这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下!

假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相关工具美化后的结果

{
  "translation": [
    "爱"
  ],
  "basic": {
    "us-phonetic": "lʌv",
    "phonetic": "lʌv",
    "uk-phonetic": "lʌv",
    "explains": [
      "n. 恋爱;亲爱的;酷爱;喜爱的事物",
      "vt. 喜欢;热爱;爱慕",
      "vi. 爱",
      "n. (Love)人名;(英)洛夫"
    ]
  },
  "web": [
    {
      "value": [
        "爱情",
        "爱",
        "爱"
      ],
      "key": "Love"
    },
    {
      "value": [
        "无尽的爱",
        "蓝色生死恋",
        "不了情"
      ],
      "key": "Endless Love"
    },
    {
      "value": [
        "早恋",
        "青春期恋爱",
        "初恋"
      ],
      "key": "puppy love"
    }
  ]
}

我们把数据定义为一个字符串,加入转义字符之后就成了这样,有点乱是吧,所以我们根据上图分析就好啦。

Json数据说白了就是对象和数组的相互嵌套,那么我们开始吧!
  
String st =
"{\"translation\":[\"爱\"],\"basic\":{\"us-phonetic\":\"lʌv\",\"phonetic\":\"lʌv\",\"uk-phonetic\":\"lʌv\",\"explains\":[\"n.
恋爱;亲爱的;酷爱;喜爱的事物\",\"vt. 喜欢;热爱;爱慕\",\"vi. 爱\",\"n.
(Love)人名;(英)洛夫\"]},\"query\":\"love\",\"errorCode\":0,\"web\":[{\"value\":[\"爱情\",\"爱\",\"爱\"],\"key\":\"Love\"},{\"value\":[\"无尽的爱\",\"蓝色生死恋\",\"不了情\"],\"key\":\"Endless
Love\"},{\"value\":[\"早恋\",\"青春期恋爱\",\"初恋\"],\"key\":\"puppy
love\"}]}";

JSONObject str = JSONObject.fromObject(st);                 //json数据的最外层肯定是一个对象,参数为字符串
                                               //对象str又分为3部分:translation,basic,web  
        if(str.has("translation")){        
            JSONArray tr = str.getJSONArray("translation");               //translation是一个json数组
            for(int i = 0 ;i<tr.size();i++){                      //对数组元素进行遍历
                System.out.println(tr.getString(i));              //因为元素的值是String类型的所以忽的值的方法是getString(index)
            }
        }

//basic中有数组也有元素
        if(str.has("basic")){                            
            JSONObject us = str.getJSONObject("basic");               //对元素进行解析,并输出元素的值
            System.out.print("美:[" + us.getString("us-phonetic") + "]\t");    
            
            JSONObject uk = str.getJSONObject("basic");
            System.out.print("英:[" + us.getString("uk-phonetic") + "]\n");
            
            JSONObject basic = str.getJSONObject("basic");              //先获得basic对象
            JSONArray explain = basic.getJSONArray("explains");            //再获得basic对象下的explains数组 
            for(int i = 0;i<explain.size(); i++){                   //对数组元素进行遍历
                System.out.println(explain.getString(i));
            }     
        }
        if(str.has("web")){                               //web是一个数组,每个数组元素又是三个Json对象
            System.out.println("拓展:");                      
            JSONArray web = str.getJSONArray("web");               
            for(int i = 0; i<web.size() ; i++ ){                   //但是对象中又嵌套着数组
                String t = web.getString(i);                   //遍历过程将web数组元素赋给String型变量
                JSONObject we = JSONObject.fromObject(t);             //通过String又得到每个元素的对象
                if(we.has("key")){            
                    System.out.print(we.getString("key")+"\t");        //得到对象中的元素
                }
                if(we.has("value")){                      
                    JSONArray value = we.getJSONArray("value");
                    for(int x = 0 ; x<value.size() ;x++ ){          //遍历对象中嵌套的数组
                        System.out.print(value.getString(x));       //得到数组元素的值
                        if(x<value.size()-1){
                            System.out.print(";");
                        }
                    }
                }
                System.out.println();
            }
        }

到这里就解析完啦!

用JAVA进行Json数据解析(对象数组的相互嵌套)的更多相关文章

  1. Java XML JSON 数据解析

    下面我们通过一段代码了解一下解析JSON格式数据的基本过程: 提示:使用JSON需要导入 JSON 相关的多个Jar文件 import net.sf.json.JSONObject; public c ...

  2. cocos2d-x把json数据解析到数组或字典中(libjson库)

    以前在cocos2d-x项目中用到json解析,集成了libjson库后发现网上提供的解析方法大多是在解析过程中取得值,并没有将解析结果有效的保存起来,于是摸索一番,把解析结果根据数据格式存到数组或字 ...

  3. Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合

    Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合 摘要:本文主要记录了如何将将前端的对象数组通过Json字符串传到后端,并在后端将Json字符串转换为对象集合. 前端代码 前 ...

  4. JSON数据解析 基础知识及链接收集

    JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...

  5. iOS - JSON 数据解析

     iOS - JSON 数据解析 前言 NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject @availab ...

  6. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  7. JSON数据解析及gson.jar包

    从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送. 服务器端的编程语言只能以如下 3 种格式返回数据: HTML XML JSON JSON一种简单的数据格式,比xml更轻巧. JS ...

  8. 使用Gson轻松解决复杂结构的Json数据解析

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50961803 JSON简介 JSON(JavaScript Object Notati ...

  9. 最简单简洁高效的Json数据解析

    一.无图无真相 二.主要代码 1.导入jar包 拷贝fastjson.jar包到projectlibs包下 2.封装工具类JsonUtil.java package com.example.parse ...

随机推荐

  1. linux虚拟化概述

    虚拟化硬件虚拟化:一台物理机虚拟出多台逻辑上的计算机cpu,内存可分配给多个虚拟机软件虚拟化:一个LAMP平台支撑多个网站桌面虚拟化...... 虚拟机:通过软件平台模拟出的计算机对最终用户来说,感受 ...

  2. java 8 Lambda表达式(翻译自Stackoverflow)

    (原文链接)Lambda只能作用于一个只有一个抽象方法的函数式接口(Function Interface),不过函数式接口可以有任意数量default或static修饰的方法(因此,它们有时也被当做单 ...

  3. 微信 Tinker 的一切都在这里,包括源码

    最近半年以来,Android热补丁技术热潮继续爆发,各大公司相继推出自己的开源框架.Tinker在最近也顺利完成了公司的审核,并非常荣幸的成为github.com/Tencent上第一个正式公开的项目 ...

  4. R语言之内存管理

    转载于:http://blog.csdn.net/hubifeng/article/details/41113789 在处理大型数据过程中,R语言的内存管理就显得十分重要,以下介绍几种常用的处理方法. ...

  5. JavaScript获取当前日期

    JavaScript获取当前日期 具体实现如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  6. 求sum=1+111+1111+........+1....111 .

    1,思路 大数相加,若直接使用int,或者long都会超出长度,因此考虑使用String存储. 2,代码 public class LargeNumAdd { public static void m ...

  7. AM335x(TQ335x)学习笔记——GPIO按键驱动移植

    还是按照S5PV210的学习顺序来,我们首先解决按键问题.TQ335x有六个用户按键,分别是上.下.左.右.Enter和ESC.开始我想到的是跟学习S5PV210时一样,编写输入子系统驱动解决按键问题 ...

  8. TI AM335X处理器介绍

    AM335X是美国TI(德州仪器)公司基于 ARM Cortex-A8内核的AM335X微处理器,在图像.图形处理.外设方面进行了增强,并全面支持诸如 EtherCAT 和 PROFIBUS等工业接口 ...

  9. 常用UI模板,loading框,提醒框,弹框确认框

    css部分 #public_box{width:100%;height:100%;position:fixed;top:0;left:0;z-index:100;background:rgba(0,0 ...

  10. Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons

    提供两种思路 一种线段树区间更新 另一种用map维护连续的区间,也是题解的思路 第二种很难写(我太渣,看了别人的代码,发现自己写的太烦了) #include<iostream> #incl ...