Java解析JSON

1. 先说一个调试程序过程中的心得:

由于txt文本被Editplus处理后编码utf-8的格式好像有BOM之分,于是导致Java文件操作时出现首字节乱码问题。丫的,为什么不尝试新建个txt文件来测试,只是在那一个文件上死扣,调试bug时要注意分析控制变量。

2。解析json时很多乱码,比如出现多个国家的语言的地方。其实这些乱码是由于所用的文本编辑器的解码方式不同而造成的,可以用Editplus,选择一种合适的编码方式即可,这里解析的数据是USA那边的,选择了UTF-8+BOM,便可以解决。由于解析的文档较大,直接处理整个文本太耗内存,而且速度慢,于是每次拷一部分进temp.txt文档,然后对temp.txt文档解析,逐渐解析完毕。

3. 这里的工作介绍如下:知识单纯的读入一个存储JSON格式数据的文本,并将其解析为自定义的格式,然后存入到结果文本中,这篇博客的工作到此结束。之后的工作将文本读取转为一个字符串,并解析建数据库,将数据存入到数据库中,sqlserver2012。

下面是解析的JSON格式:



[
  {
    "Properties": {
      "ID": [
        "com.hyperbeard.muertitos"
      ],
      "UpdatedTime": [
        "November 11, 2014"
      ],
      "ContentRating": [
        "Everyone"
      ],
      "UpdatedDateByCrawler": [
        "20141122"
      ],
      "Description": [
        "Muertitos (The Little Dead): 这里是Description,内容太长。。。"
      ],
      "RatingCount": [
        "106"
      ],
      "OsVersion": [
        "2.3.3 and up"
      ],
      "AppSize": [
        "41M"
      ],
      "NumDownloads": [
        "500 - 1,000"
      ],
      "Price": [
        "$0.99"
      ],
      "RatingScore": [
        "87.54716873168945"
      ],
      "Category": [
        "Puzzle"
      ],
      "AcquiredDateByCrawler": [
        "20141109"
      ],
      "PublisherUrl": [
        "https://play.google.com/store/apps/developer?id=HyperBeard+Games"
      ],
      "Title": [
        "Muertitos a Matching Puzzle"
      ],
      "Url": [
        "https://play.google.com/store/apps/details?id=com.hyperbeard.muertitos"
      ],
      "Publisher": [
        "HyperBeard Games"
      ],
      "CategoryUrl": [
        "https://play.google.com/store/apps/category/GAME_PUZZLE"
      ],
      "AppVersion": [
        "1.1"
      ],
      "IconUrl": [
        "https://lh5.ggpht.com/s2-q25dSJk6b0tbdebtwspl42Qi95LUzMtCwCCD5vQ0STRWYWf-shYufXFjprRgdWEg=w300"
      ]
    }
  }
]
代码:

</pre><p><pre name="code" class="java">package com.shawn.jsontest;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.security.acl.Permission;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class AndroidResolve {
	public String readFile(String fileName) throws Exception {
		BufferedReader bf = new BufferedReader(new FileReader(fileName));
		String content="";
		String s="";
		while(content != null){
			content = bf.readLine();
			if(content == null)
				break;
			s=s+content.trim();			
		}
		bf.close();
		return s;
	}	
	public static void resolve(String fileIn,String fileOut) throws Exception{
		File result = new File(fileOut);
		BufferedWriter bw = new BufferedWriter(new FileWriter(result,false));
		//String string = ;
		//System.out.println(string.substring(89000, 89900));
		JSONArray apps = new JSONArray(new AndroidResolve().readFile(fileIn));
		System.out.println(apps.length());
		for(int i=0;i<apps.length();i++){			
			System.out.println("APP\t "+i +"---------------------------------------------------------------------------------------");			
			bw.write("APP "+String.valueOf(i+1)+":");
			JSONObject app = (JSONObject) apps.get(i);
			JSONObject properties = (JSONObject) app.get("Properties");
				JSONArray ID = properties.getJSONArray("ID");
				bw.newLine();
				bw.write("\tID : "+ID.get(0));
/*				System.out.println("APP "+String.valueOf(i+1)+":");
				System.out.println("\tID : "+ID.get(0));
*/	
				try {
					JSONArray UpdateTime = properties.getJSONArray("UpdatedTime");
					bw.newLine();
					bw.write("\tUpdateTime : "+UpdateTime.get(0));
				} catch (Exception e1) {
					e1.printStackTrace();
				}
				try {
					JSONArray ContentRating = properties.getJSONArray("ContentRating");
					bw.newLine();
					bw.write("\tContentRating : "+ContentRating.get(0));
				} catch (Exception e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}
				try {
					JSONArray UpdatedDateByCrawler = properties.getJSONArray("UpdatedDateByCrawler");
					bw.newLine();
					bw.write("\tUpdatedDateByCrawler : "+UpdatedDateByCrawler.get(0));
				} catch (Exception e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}
				try {
					JSONArray Description = properties.getJSONArray("Description");
					bw.newLine();
					bw.write("\tDescription : "+Description.get(0));
				} catch (Exception e1) {
					e1.printStackTrace();
				}
				try {
					JSONArray ScreenshotUrls = properties.getJSONArray("ScreenshotUrls");
					for(int j = 0; j < ScreenshotUrls.length(); j++){
						bw.newLine();
						bw.write("\tScreenshotUrls "+String.valueOf(j)+ ": "+ScreenshotUrls.get(j));
					}
				} catch (Exception e) {
					//e.printStackTrace();
				}
				try {
					JSONArray RatingCount = properties.getJSONArray("RatingCount");
					bw.newLine();
					bw.write("\tRatingCount : "+RatingCount.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray OsVersion = properties.getJSONArray("OsVersion");
					bw.newLine();
					bw.write("\tOsVersion : "+OsVersion.get(0));
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				try {
					JSONArray AppSize = properties.getJSONArray("AppSize");
					bw.newLine();
					bw.write("\tAppSize : "+AppSize.get(0));
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				try {
					JSONArray NumDownloads = properties.getJSONArray("NumDownloads");
					bw.newLine();
					bw.write("\tNumDownloads : "+NumDownloads.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray Price = properties.getJSONArray("Price");
					bw.newLine();
					bw.write("\tPrice : "+Price.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray RatingScore = properties.getJSONArray("RatingScore");
					bw.newLine();
					bw.write("\tRatingScore : "+RatingScore.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray Category = properties.getJSONArray("Category");
					bw.newLine();
					bw.write("\tCategory : "+Category.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray AcquiredDateByCrawler = properties.getJSONArray("AcquiredDateByCrawler");
					bw.newLine();
					bw.write("\tAcquiredDateByCrawler : "+AcquiredDateByCrawler.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray PublisherUrl = properties.getJSONArray("PublisherUrl");
					bw.newLine();
					bw.write("\tPublisherUrl : "+PublisherUrl.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray Title = properties.getJSONArray("Title");
					bw.newLine();
					bw.write("\tTitle : "+Title.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray Url = properties.getJSONArray("Url");
					bw.newLine();
					bw.write("\tUrl : "+Url.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray Publisher = properties.getJSONArray("Publisher");
					bw.newLine();
					bw.write("\tPublisher : "+Publisher.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray CategoryUrl = properties.getJSONArray("CategoryUrl");
					bw.newLine();
					bw.write("\tCategoryUrl : "+CategoryUrl.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray AppVersion = properties.getJSONArray("AppVersion");
					bw.newLine();
					bw.write("\tAppVersion : "+AppVersion.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					JSONArray IconUrl = properties.getJSONArray("IconUrl");
					bw.newLine();
					bw.write("\tIconUrl : "+IconUrl.get(0));
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				bw.newLine();
		}
		bw.close();
	}
	public static void main(String[] args){
		try {
			resolve("E:\\JsonResolve\\temp2.txt", "E:\\JsonResolve\\temp2_result.txt");
			System.out.println("Done");
		} catch (Exception e) {
			e.printStackTrace();
		}	
	}
}




你可能感兴趣的:(Java解析JSON)