InputStream을 JSONObject로 변환
다음 코드를 사용하여 InputStream을 JSONObject로 변환합니다.InputStream을 JSONObject로 간단하게 변환할 수 있는 방법이 없을까요?InputStream -> BufferedReader -> StringBuilder -> 루프 -> 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());
이미 구글을 사용하고 있기 때문에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"));
JsonReader를 사용하여 InputStream을 해석합니다.API의 예를 참조하십시오.http://developer.android.com/reference/android/util/JsonReader.html
준비된 도서관을 엉망으로 만들고 싶지 않다면 이런 수업을 만들어도 된다.
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();
이 코드는 동작합니다.
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());
이 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.filename 파일 내용:
{"fName":"Mohamed",
"lName":"Ali"
}
이 방법은 효과가 있었습니다.
JSONArray jsonarr = (JSONArray) new JSONParser().parse(new InputStreamReader(Nameofclass.class.getResourceAsStream(pathToJSONFile)));
JSONObject jsonobj = (JSONObject) new JSONParser().parse(new InputStreamReader(Nameofclass.class.getResourceAsStream(pathToJSONFile)));
심플한 솔루션:
JsonElement element = new JsonParser().parse(new InputStreamReader(inputStream));
JSONObject jsonObject = new JSONObject(element.getAsJsonObject().toString());
가장 좋은 해결책은 InputStream을 JSONTokener 객체에 캡슐화하는 것입니다.다음과 같은 경우:
JSONObject jsonObject = new JSONObject(new JSONTokener(inputStream));
다음은 루프를 사용하지 않고 Android API만 사용하는 솔루션입니다.
InputStream inputStreamObject = PositionKeeperRequestTest.class.getResourceAsStream(jsonFileName);
byte[] data = new byte[inputStreamObject.available()];
if(inputStreamObject.read(data) == data.length) {
JSONObject jsonObject = new JSONObject(new String(data));
}
Jackson JSON 파서를 활용하다
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> map = mapper.readValue(inputStreamObject,Map.class);
특정 JSONObject를 원하는 경우 맵을 변환할 수 있습니다.
JSONObject json = new JSONObject(map);
JSONObject 컨스트럭터 http://stleary.github.io/JSON-java/index.html 의 사용 방법에 대해서는, 이것을 참조해 주세요.
엔티티를 사용할 수 있습니다.
FileEntity entity = new FileEntity(jsonFile, "application/json");
String jsonString = EntityUtils.toString(entity)
또 다른 솔루션: Flexjson을 사용합니다.jar:http://mvnrepository.com/artifact/net.sf.flexjson/flexjson/3.2
List<yourEntity> yourEntityList = deserializer.deserialize(new InputStreamReader(input));
InputStream inputStreamObject = PositionKeeperRequestTest.class.getResourceAsStream(jsonFileName);
JSONObject jsonObject = new JSONObject(IOUtils.toString(inputStreamObject));
아래 제시된 바와 같이 제가 만든 훌륭한 방법을 사용할 수 있습니다.
JSONObject getJsonFromInStream(InputStream inputStream ) throws IOException, JSONException {
BufferedReader bR = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
StringBuilder responseStrBuilder = new StringBuilder();
while((line = bR.readLine()) != null){
responseStrBuilder.append(line);
}
inputStream.close();
return new JSONObject(responseStrBuilder.toString());
}
언급URL : https://stackoverflow.com/questions/22461663/convert-inputstream-to-jsonobject
'itsource' 카테고리의 다른 글
MongoDB 및 Mongoose에서 전체 텍스트 검색을 수행하는 가장 좋은 방법 (0) | 2023.03.13 |
---|---|
MongoDB 컬렉션 하이픈으로 연결된 이름 (0) | 2023.03.13 |
내 워드프레스 게시물을 인스타그램에 공유하는 방법 (0) | 2023.03.13 |
WooCommerce:아이템이 이미 카트에 있는지 확인합니다. (0) | 2023.03.13 |
추적: 노드 유형 SpreadProperty의 이름이 Object.isSpreadProperty에서 SpreadElement로 변경되었습니다. (0) | 2023.03.08 |