it-swarm.cn

从JSON文本文件加载JSONObject的最佳方法是什么?

将包含JSON的文件加载到JSONObject中的最简单方法是什么。

目前,我正在使用json-lib。

这是我所拥有的,但是会引发异常:

XMLSerializer xml = new XMLSerializer();
JSON json = xml.readFromFile("samples/sample7.json”);     //line 507
System.out.println(json.toString(2));

输出为:

Exception in thread "main" Java.lang.NullPointerException
    at Java.io.Reader.<init>(Reader.Java:61)
    at Java.io.InputStreamReader.<init>(InputStreamReader.Java:55)
    at net.sf.json.xml.XMLSerializer.readFromStream(XMLSerializer.Java:386)
    at net.sf.json.xml.XMLSerializer.readFromFile(XMLSerializer.Java:370)
    at corebus.test.deprecated.TestMain.main(TestMain.Java:507)
30
Larry

尝试这个:

import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.Apache.commons.io.IOUtils; 

    public class JsonParsing {

        public static void main(String[] args) throws Exception {
            InputStream is = 
                    JsonParsing.class.getResourceAsStream( "sample-json.txt");
            String jsonTxt = IOUtils.toString( is );

            JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );        
            double coolness = json.getDouble( "coolness" );
            int altitude = json.getInt( "altitude" );
            JSONObject pilot = json.getJSONObject("pilot");
            String firstName = pilot.getString("firstName");
            String lastName = pilot.getString("lastName");

            System.out.println( "Coolness: " + coolness );
            System.out.println( "Altitude: " + altitude );
            System.out.println( "Pilot: " + lastName );
        }
    }

这是您的sample-json.txt,应为json格式

{
 'foo':'bar',
 'coolness':2.0,
 'altitude':39000,
 'pilot':
     {
         'firstName':'Buzz',
         'lastName':'Aldrin'
     },
 'mission':'apollo 11'
}
23
Kit Ho

感谢@Kit Ho的回答。我使用了您的代码,发现在创建JSONObject时,我一直遇到错误,其中InputStream始终为null和ClassNotFound异常。这是我的代码版本,可帮我实现窍门:

import Java.io.File;
import Java.io.FileInputStream;
import Java.io.InputStream;
import org.Apache.commons.io.IOUtils;

import org.json.JSONObject;
public class JSONParsing {
    public static void main(String[] args) throws Exception {
        File f = new File("file.json");
        if (f.exists()){
            InputStream is = new FileInputStream("file.json");
            String jsonTxt = IOUtils.toString(is, "UTF-8");
            System.out.println(jsonTxt);
            JSONObject json = new JSONObject(jsonTxt);       
            String a = json.getString("1000");
            System.out.println(a);   
        }
    }
}

我发现这个答案对 FileInputStream和getResourceAsStream之间的差异 具有启发性。希望这也能帮助其他人。

32
janoulle

使用Java 8,您可以尝试以下操作:

import org.json.JSONException;
import org.json.JSONObject;

import Java.io.IOException;
import Java.nio.file.Files;
import Java.nio.file.Paths;

public class JSONUtil {

    public static JSONObject parseJSONFile(String filename) throws JSONException, IOException {
        String content = new String(Files.readAllBytes(Paths.get(filename)));
        return new JSONObject(content);
    }

    public static void main(String[] args) throws IOException, JSONException {
        String filename = "path/to/file/abc.json";
        JSONObject jsonObject = parseJSONFile(filename);

        //do anything you want with jsonObject
    }
}
8
IKo

另一种方法可以使用Gson类

String filename = "path/to/file/abc.json";
Gson gson = new Gson();
JsonReader reader = new JsonReader(new FileReader(filename));
SampleClass data = gson.fromJson(reader, SampleClass.class);

这将提供一个在解析json字符串后使用的对象。

3
Antariksh