JSON이 JSONObject인지 JSONArray인지를 확인합니다.
서버에서 JSON Object 또는 Array 중 하나를 받을 예정이지만 어떤 것이 될지는 모릅니다.JSON을 사용하여 작업해야 하는데 작업하려면 개체인지 배열인지 확인해야 합니다.
저는 안드로이드로 작업하고 있습니다.
누구 좋은 방법 있는 사람 있어요?
다음 사항을 더 잘 판단할 수 있는 방법을 찾았습니다.
String data = "{ ... }";
Object json = new JSONTokener(data).nextValue();
if (json instanceof JSONObject)
//you have an object
else if (json instanceof JSONArray)
//you have an array
토큰라이저는 더 많은 유형을 반환할 수 있습니다.http://developer.android.com/reference/org/json/JSONTokener.html#nextValue()
여기에는 몇 가지 방법이 있습니다.
- 문자열의 첫 번째 위치에서 문자를 확인할 수 있습니다(유효한 JSON에서 허용되므로 공백을 잘라낸 후).의 경우
{
, 고객님은 현재 취급하고 있는 것은JSONObject
의 경우,[
, 고객님은 현재 취급하고 있는 것은JSONArray
. - JSON을 취급하고 있는 경우,
Object
)을(를) 실행할 수 있습니다.instanceof
확인.yourObject instanceof JSONObject
. yourObject가 JSONObject일 경우 true가 반환됩니다.JSONAray에도 마찬가지입니다.
Android에서 사용하는 간단한 솔루션은 다음과 같습니다.
JSONObject json = new JSONObject(jsonString);
if (json.has("data")) {
JSONObject dataObject = json.optJSONObject("data");
if (dataObject != null) {
//Do things with object.
} else {
JSONArray array = json.optJSONArray("data");
//Do things with array
}
} else {
// Do nothing or throw exception if "data" is a mandatory field
}
다른 방법을 제시합니다.
if(server_response.trim().charAt(0) == '[') {
Log.e("Response is : " , "JSONArray");
} else if(server_response.trim().charAt(0) == '{') {
Log.e("Response is : " , "JSONObject");
}
여기서server_response
서버로부터의 응답 문자열입니다.
이를 위한 보다 근본적인 방법은 다음과 같습니다.
JsonArray
기본적으로 목록입니다.
JsonObject
본질적으로 지도입니다.
if (object instanceof Map){
JSONObject jsonObject = new JSONObject();
jsonObject.putAll((Map)object);
...
...
}
else if (object instanceof List){
JSONArray jsonArray = new JSONArray();
jsonArray.addAll((List)object);
...
...
}
인스턴스
오브젝트.getClass().getName()
JavaScript에서 이 문제에 대처하는 분들을 위해 다음과 같은 작업을 수행했습니다(효율적인지 잘 모르겠습니다).
if(object.length != undefined) {
console.log('Array found. Length is : ' + object.length);
} else {
console.log('Object found.');
}
JsonNode jsonNode=mapper.readTree(patchBody);
json Node에는 다음 두 가지 방법이 있습니다.
isObject();
isArray();
나의 접근법은 이것으로부터 완전히 추상화 될 것이다.누군가 이걸 유용하게 여길지도...
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class SimpleJSONObject extends JSONObject {
private static final String FIELDNAME_NAME_VALUE_PAIRS = "nameValuePairs";
public SimpleJSONObject(String string) throws JSONException {
super(string);
}
public SimpleJSONObject(JSONObject jsonObject) throws JSONException {
super(jsonObject.toString());
}
@Override
public JSONObject getJSONObject(String name) throws JSONException {
final JSONObject jsonObject = super.getJSONObject(name);
return new SimpleJSONObject(jsonObject.toString());
}
@Override
public JSONArray getJSONArray(String name) throws JSONException {
JSONArray jsonArray = null;
try {
final Map<String, Object> map = this.getKeyValueMap();
final Object value = map.get(name);
jsonArray = this.evaluateJSONArray(name, value);
} catch (Exception e) {
throw new RuntimeException(e);
}
return jsonArray;
}
private JSONArray evaluateJSONArray(String name, final Object value) throws JSONException {
JSONArray jsonArray = null;
if (value instanceof JSONArray) {
jsonArray = this.castToJSONArray(value);
} else if (value instanceof JSONObject) {
jsonArray = this.createCollectionWithOneElement(value);
} else {
jsonArray = super.getJSONArray(name);
}
return jsonArray;
}
private JSONArray createCollectionWithOneElement(final Object value) {
final Collection<Object> collection = new ArrayList<Object>();
collection.add(value);
return (JSONArray) new JSONArray(collection);
}
private JSONArray castToJSONArray(final Object value) {
return (JSONArray) value;
}
private Map<String, Object> getKeyValueMap() throws NoSuchFieldException, IllegalAccessException {
final Field declaredField = JSONObject.class.getDeclaredField(FIELDNAME_NAME_VALUE_PAIRS);
declaredField.setAccessible(true);
@SuppressWarnings("unchecked")
final Map<String, Object> map = (Map<String, Object>) declaredField.get(this);
return map;
}
}
그리고 이제 이 행동을 영원히 없애버려...
...
JSONObject simpleJSONObject = new SimpleJSONObject(jsonObject);
...
언급URL : https://stackoverflow.com/questions/6118708/determine-whether-json-is-a-jsonobject-or-jsonarray
'code' 카테고리의 다른 글
Rails는 빈 어레이를 요청 매개 변수에서 nil로 변환합니다. (0) | 2023.02.12 |
---|---|
AngularJS: 컨트롤러에서 해결 기능을 사용할 경우 최소화할 수 있는 구문 수정 (0) | 2023.02.12 |
ID별 Woocommerce 제품 값 가져오기 (0) | 2023.02.12 |
css에서 !보다 더 중요한 것이 있나요? (0) | 2023.02.12 |
리액트를 사용한 예쁜 JSON 인쇄 (0) | 2023.02.12 |