将InputStream转换为JSONObject

AAV*_*AAV 36 java android json inputstream

我正在使用以下代码将InputStream转换为JSONObject.我的问题是,是否有任何简单的方法将InputStream转换为JSONObject.不做InputStream - > BufferedReader - > StringBuilder - > loop - > JSONObject.toString().

    InputStream inputStreamObject = PositionKeeperRequestTest.class.getResourceAsStream(jsonFileName);
    BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStreamObject, "UTF-8"));
    StringBuilder responseStrBuilder = new StringBuilder();

    String inputStr;
    while ((inputStr = streamReader.readLine()) != null)
        responseStrBuilder.append(inputStr);

    JSONObject jsonObject = new JSONObject(responseStrBuilder.toString());
Run Code Online (Sandbox Code Playgroud)

Sas*_*uri 24

由于您已经在使用Google的Json-Simple库,因此您可以通过以下方式解析json InputStream:

InputStream inputStream = ... //Read from a file, or a HttpRequest, or whatever.
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject)jsonParser.parse(
      new InputStreamReader(inputStream, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么,但此代码引发异常:线程“main”中的异常 java.lang.ClassCastException: class org.json.simple.JSONArray cannot be cast to class org.json.JSONObject (org.json.simple.JSONArray and org .json.JSONObject 位于加载器“app”的未命名模块中) (2认同)

ift*_*hem 10

使用JsonReader来解析InputStream.请参阅API中的示例:http: //developer.android.com/reference/android/util/JsonReader.html

  • 它(几乎)是一个仅限链接的答案.通过在答案中包含要点,你会好得多. (4认同)
  • 这应该是公认的答案......在链接的代码很简单:JsonReader读卡器=新JsonReader(新的InputStreamReader(在"UTF-8")); (3认同)

Art*_*hur 9

如果你不想搞乱现成的库,你可以创建一个这样的类.

public class JsonConverter {

//Your class here, or you can define it in the constructor
Class requestclass = PositionKeeperRequestTest.class;

//Filename
String jsonFileName;

//constructor
public myJson(String jsonFileName){
    this.jsonFileName = jsonFileName;
}


//Returns a json object from an input stream
private JSONObject getJsonObject(){

    //Create input stream
    InputStream inputStreamObject = getRequestclass().getResourceAsStream(jsonFileName);

   try {
       BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStreamObject, "UTF-8"));
       StringBuilder responseStrBuilder = new StringBuilder();

       String inputStr;
       while ((inputStr = streamReader.readLine()) != null)
           responseStrBuilder.append(inputStr);

       JSONObject jsonObject = new JSONObject(responseStrBuilder.toString());

       //returns the json object
       return jsonObject;

   } catch (IOException e) {
       e.printStackTrace();
   } catch (JSONException e) {
       e.printStackTrace();
   }

    //if something went wrong, return null
    return null;
}

private Class getRequestclass(){
    return requestclass;
}
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样使用它:

JSONObject jObject = new JsonConverter(FILE_NAME).getJsonObject();
Run Code Online (Sandbox Code Playgroud)


小智 5

这段代码有效

BufferedReader bR = new BufferedReader(  new InputStreamReader(inputStream));
String line = "";

StringBuilder responseStrBuilder = new StringBuilder();
while((line =  bR.readLine()) != null){

    responseStrBuilder.append(line);
}
inputStream.close();

JSONObject result= new JSONObject(responseStrBuilder.toString());       
Run Code Online (Sandbox Code Playgroud)


Bla*_*elt 0

你可以使用一个实体:

FileEntity entity = new FileEntity(jsonFile, "application/json");
String jsonString = EntityUtils.toString(entity)
Run Code Online (Sandbox Code Playgroud)

  • 他们使用“Class#getResourceAsStream()”,它为类路径上的资源返回一个“InputStream”。他们这里没有“文件”。 (3认同)