web-dev-qa-db-ja.com

InputStreamをJSONObjectに変換する

次のコードを使用して、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());
34
AAV

すでにGoogleのJson-Simpleライブラリを使用しているため、次のようにInputStreamからjsonを解析できます。

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"));
22

inputStreamを解析するためにJsonReaderを使用します。 API内の例を参照してください: http://developer.Android.com/reference/Android/util/JsonReader.html

10
iftach barshem

準備が整ったライブラリをいじりたくない場合は、このようなクラスを作成できます。

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;
}
}

その後、次のように使用できます。

JSONObject jObject = new JsonConverter(FILE_NAME).getJsonObject();
8
Arthur

このコードは機能します

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());       
5

エンティティを使用できます:

FileEntity entity = new FileEntity(jsonFile, "application/json");
String jsonString = EntityUtils.toString(entity)
2
Blackbelt

簡単なソリューション:

JsonElement element = new JsonParser().parse(new InputStreamReader(inputStream));
JSONObject jsonObject = new JSONObject(element.getAsJsonObject().toString());
2
Surendra Kumar

このAPIを使用できます https://code.google.com/p/google-gson/
シンプルで非常に便利です。

https://code.google.com/p/google-gson/ APIを使用して問題を解決する方法は次のとおりです。

public class Test {
  public static void main(String... strings) throws FileNotFoundException  {
    Reader reader = new FileReader(new File("<fullPath>/json.js"));
    JsonElement elem = new JsonParser().parse(reader);
    Gson gson  = new GsonBuilder().create();
   TestObject o = gson.fromJson(elem, TestObject.class);
   System.out.println(o);
  }


}

class TestObject{
  public String fName;
  public String lName;
  public String toString() {
    return fName +" "+lName;
  }
}


json.jsファイルのコンテンツ:

{"fName":"Mohamed",
"lName":"ALi"
}
1
elhaj

これは私のために働いた:

JSONArray jsonarr = (JSONArray) new JSONParser().parse(new InputStreamReader(Nameofclass.class.getResourceAsStream(pathToJSONFile)));
JSONObject jsonobj = (JSONObject) new JSONParser().parse(new InputStreamReader(Nameofclass.class.getResourceAsStream(pathToJSONFile)));
1
Muralidhar Bg

私の意見では、InputStreamをJSONTokenerオブジェクトにカプセル化することが最善の解決策です。このようなもの:

JSONObject jsonObject = new JSONObject(new JSONTokener(inputStream));
0
Daniele Zagnoni

別のソリューション:flexjson.jarを使用: http://mvnrepository.com/artifact/net.sf.flexjson/flexjson/3.2

List<yourEntity> yourEntityList = deserializer.deserialize(new InputStreamReader(input));
0
mig8