[Tools] [JSON] 解析文件各个元素测试例子

说明:

从HTTP server获取一个JSON文件后进行解析,此例子主要说明如何利用JSONObject和JSONArray来对对象和数组等元素进行解析。


文件内容:

{
  "header":{
    "stamp":14321212,
    "frame_id":base_laser
  }
  "mapInfo":{
    "gridWidth":1000, // 栅格地图宽度
    "gridHeight":1000, // 栅格地图大小
    "originX": -41.273852042959405,  // 坐标系原点x
    "originY": -39.639522665878005,  // 坐标系原点y
    "resolution": 0.05 // 栅格化比例即1:20
  },
  "gridPhits":[{x:111,y:111},{x:111,y:111},{x:111,y:111}], //栅格化后的激光位置
  "worldPhits":[
    {
        "x": -0.00000000000180135178,
        "y": 0.00000002584042026,
        "z": 0
    },
    {
        "x": -0.00000000000180135178,
        "y": 0.00000002584042026,
        "z": 0
    },
    {
        "x": -0.00000000000180135178,
        "y": 0.00000002584042026,
        "z": 0
    }]
}

解析代码:

LaserPhit类对应此文件,父类定义一些共有数据,因为有不同格式的JSON文件要处理,里面会有一些共同的内容。

LaserPhit.java

    class LaserPhit extends  GSResponse{
        //http的get路径
        private static final String mJsonPath = "/gs-robot/real_time_data/laser_phit";
        private static final String TAG = "LaserPhit";

        //对应文件数据结构,定义见后面的父类
        Header header = new Header();
        MapInfo mapInfo = new MapInfo();
        ArrayList<Point> mGridPhits = new ArrayList<Point>();
        ArrayList<Coordinate> mWorldPhits = new ArrayList<Coordinate>();

        public LaserPhit(){
            super(mJsonPath);
        }

        //解析接口
        public void parseJsonData(JSONObject object){
            try {
                parseHeader(object, header);
                parseMapInfo(object, mapInfo);
                //GridPhit
                parseGridPhit(object, mGridPhits);
                //WorldPhit
                parseWorldPhit(object, mWorldPhits);

                Log.i(TAG, "parseJsonData: done");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

父类GSResponse.java

   public abstract class GSResponse {
        class Header {
            int mstamp;
            String mFrameId;
        }

        class MapInfo{
            int mGridWidth;
            int mGridHeight;
            double mOriginX;
            double mOriginY;
            double mResolution;
        }

        private static final String TAG = "GSResponse";
        private String mServer = "http://10.89.19.99";
        private String mJsonPath;

        public GSResponse(String mJsonPath){
            this.mJsonPath = mJsonPath;
        }


        private String getJsonFilePath(){
            return mServer+mJsonPath;
        }

        public void parseJsonData(JSONObject object){
            parseResponseStatus(object, mResponseStatus);
            Log.i(TAG, "parseJsonData: done ");
        }


        public void parseHeader(JSONObject object, Header header){
            try {
                JSONObject objectHeader = object.getJSONObject("header");
                header.mstamp = objectHeader.getInt("stamp");
                //TODO, which type should i define?
                header.mFrameId = objectHeader.getString("frame_id");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void parseGridPhit(JSONObject object, ArrayList<Point>  gridPhitList){
            try {
                JSONArray gridPhits = object.getJSONArray("gridPhits");
                for(int i=0 ; i<gridPhits.length(); i++) {
                    Point pos = new Point();
                    JSONObject objectGridPhits = gridPhits.getJSONObject(i);
                    pos.x = objectGridPhits.getInt("x");
                    pos.y = objectGridPhits.getInt("y");
                    Log.i(TAG, "parseGridPhit: x:"+pos.x+" y:"+pos.y);
                    gridPhitList.add(pos);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public void parseWorldPhit(JSONObject object, ArrayList<Coordinate>  worldPhitsList){
            try {
                JSONArray worldPhits = object.getJSONArray("worldPhits");
                for(int i=0 ; i<worldPhits.length(); i++) {
                    Coordinate cd = new Coordinate();
                    parseCoordinate(worldPhits.getJSONObject(i), cd);
                    worldPhitsList.add(cd);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


        public void parseMapInfo(JSONObject object, MapInfo mi) {
            try {
                JSONObject objectMapInfo = object.getJSONObject("mapInfo");
                mi.mGridWidth = objectMapInfo.getInt("gridWidth");
                mi.mGridHeight = objectMapInfo.getInt("gridHeight");
                mi.mOriginX = objectMapInfo.getDouble("originX");
                mi.mOriginY = objectMapInfo.getDouble("originY");
                mi.mResolution = objectMapInfo.getDouble("resolution");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值