JSONException : java.lang.String 유형의 값을 JSONObject로 변환 할 수 없습니다.
2 개의 JSON 배열이있는 JSON 파일이 있습니다. 하나는 경로 용 배열이고 다른 하나는 광경 용 배열입니다.
경로는 사용자가 탐색하는 여러 명소로 구성되어야합니다. 불행히도 오류가 발생합니다.
JSONException : java.lang.String 유형의 값을 JSONObject로 변환 할 수 없습니다.
다음은 내 변수와 JSON 파일을 구문 분석하는 코드입니다.
private InputStream is = null;
private String json = "";
private JSONObject jObj = null;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
// hier habe ich das JSON-File als String
json = sb.toString();
Log.i("JSON Parser", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
Log.i ( "JSON 파서", json); 생성 된 문자열의 시작 부분에 이상한 기호가 있음을 보여줍니다.
그러나 여기에서 오류가 발생합니다.
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
04-22 14 : 01 : 05.043 : E / JSON Parser (5868) : 데이터 구문 분석 오류 org.json.JSONException : 값 // STRANGE SIGN HERE // java.lang.String 유형은 JSONObject로 변환 할 수 없습니다.
누구든지 JSONObject를 만들기 위해 이러한 표시를 제거하는 방법에 대한 단서를 가지고 있습니까?
볼이 http://stleary.github.io/JSON-java/org/json/JSONObject.html#JSONObject-java.lang.String-
JSONObject
public JSONObject(java.lang.String source)
throws JSONException
소스 JSON 텍스트 문자열에서 JSONObject를 생성합니다. 가장 일반적으로 사용되는 JSONObject 생성자입니다.
Parameters:
source - `A string beginning with { (left brace) and ending with } (right brace).`
Throws:
JSONException - If there is a syntax error in the source string or a duplicated key.
다음과 같은 것을 사용하려고합니다.
new JSONObject("{your string}")
이유는 문자열을 작성할 때 원하지 않는 문자가 추가 되었기 때문입니다. 임시 해결책은
return new JSONObject(json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1));
그러나 소스 문자열에서 숨겨진 문자를 제거하십시오.
며칠 동안 같은 문제가있었습니다. 마침내 해결책을 찾았습니다 . PHP 서버는 LOG 또는 System.out에서 볼 수없는 보이지 않는 문자를 반환했습니다.
그래서 해결책은 json String을 하나씩 부분 문자열로 묶으려고했고 substring (3)에 왔을 때 오류가 사라졌습니다.
BTW. 나는 양쪽에서 UTF-8 인코딩을 사용했습니다. PHP 측 :header('Content-type=application/json; charset=utf-8');
JAVA 측 : BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
그러니 하나씩 1,2,3,4 ...! 도움이 되길 바랍니다!
try {
jObj = new JSONObject(json.substring(3));
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data [" + e.getMessage()+"] "+json);
}
다음은 몇 가지 예외 처리가있는 UTF-8 버전입니다.
static InputStream is = null;
static JSONObject jObj = null;
static String json = null;
static HttpResponse httpResponse = null;
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue(params, true);
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient(params);
HttpGet httpPost = new HttpGet( url);
httpResponse = httpClient.execute( httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException ee) {
Log.i("UnsupportedEncodingException...", is.toString());
} catch (ClientProtocolException e) {
Log.i("ClientProtocolException...", is.toString());
} catch (IOException e) {
Log.i("IOException...", is.toString());
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "utf-8"), 8); //old charset iso-8859-1
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
reader.close();
json = sb.toString();
Log.i("StringBuilder...", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (Exception e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
try {
jObj = new JSONObject(json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1));
} catch (Exception e0) {
Log.e("JSON Parser0", "Error parsing data [" + e0.getMessage()+"] "+json);
Log.e("JSON Parser0", "Error parsing data " + e0.toString());
try {
jObj = new JSONObject(json.substring(1));
} catch (Exception e1) {
Log.e("JSON Parser1", "Error parsing data [" + e1.getMessage()+"] "+json);
Log.e("JSON Parser1", "Error parsing data " + e1.toString());
try {
jObj = new JSONObject(json.substring(2));
} catch (Exception e2) {
Log.e("JSON Parser2", "Error parsing data [" + e2.getMessage()+"] "+json);
Log.e("JSON Parser2", "Error parsing data " + e2.toString());
try {
jObj = new JSONObject(json.substring(3));
} catch (Exception e3) {
Log.e("JSON Parser3", "Error parsing data [" + e3.getMessage()+"] "+json);
Log.e("JSON Parser3", "Error parsing data " + e3.toString());
}
}
}
}
}
// return JSON String
return jObj;
}
이것은 간단한 방법입니다 (Gson에게 감사드립니다)
JsonParser parser = new JsonParser();
String retVal = parser.parse(param).getAsString();
https://gist.github.com/MustafaFerhan/25906d2be6ca109f61ce#file-evaluatejavascript-string-problem
사용하려는 문자 세트에 문제가 있다고 생각합니다. iso-8859-1 대신 UTF-8을 사용하는 것이 가장 좋습니다.
또한 InputStream에 사용중인 파일을 열고 실수로 특수 문자가 삽입되지 않았는지 확인하십시오. 때로는 편집기에 숨겨진 / 특수 문자를 표시하도록 구체적으로 지시해야합니다.
return response;
그 후 응답을 받으면 다음을 구문 분석해야합니다.
JSONObject myObj=new JSONObject(response);
응답시 큰 따옴표가 필요하지 않습니다.
이것은 나를 위해 일했습니다.
json = json.replace("\\\"","'");
JSONObject jo = new JSONObject(json.substring(1,json.length()-1));
이 변경을 수행했으며 이제 작동합니다.
//BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, HTTP.UTF_8), 8);
The 3 characters at the beginning of your json string correspond to Byte Order Mask (BOM), which is a sequence of Bytes to identify the file as UTF8 file.
Be sure that the file which sends the json is encoded with utf8 (no bom) encoding.
(I had the same issue, with TextWrangler editor. Use save as - utf8 (no bom) to force the right encoding.)
Hope it helps.
In my case the problem occured from php
file. It gave unwanted characters.That is why a json parsing
problem occured.
Then I paste my php code
in Notepad++
and select Encode in utf-8 without BOM
from Encoding
tab and running this code-
My problem gone away.
In my case, my Android app uses Volley to make a POST call with an empty body to an API application hosted on Microsoft Azure.
The error was:
JSONException: Value <p>iisnode of type java.lang.String cannot be converted to JSONObject
이것은 Volley JSON 요청을 구성하는 방법에 대한 스 니펫입니다.
final JSONObject emptyJsonObject = new JSONObject();
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, emptyJsonObject, listener, errorListener);
JSONObject
다음과 같이 빈 JSON 개체를 사용하여 문제를 해결했습니다 .
final JSONObject emptyJsonObject = new JSONObject("{}");
내 해결책은 이 오래된 답변에 대한 것 입니다.
경우 키의 값이 됩니다 으로 오는 문자열 당신이 그것을 변환 할 된 JSONObject ,
먼저 key.value를 다음과 같은 String 변수로 가져옵니다.
String data = yourResponse.yourKey;
그런 다음 JSONArray로 변환
JSONObject myObj=new JSONObject(data);
'Program Tip' 카테고리의 다른 글
InnoDB가 테이블 / 테이블에서 외래 키를 다시 확인하도록 강제합니까? (0) | 2020.12.11 |
---|---|
sed 특정 문자열을 포함하지 않는 줄 삭제 (0) | 2020.12.11 |
Pandas to_csv가있는 float64 (0) | 2020.12.11 |
angularjs를 사용한 두 개의 중첩 클릭 이벤트 (0) | 2020.12.10 |
Otto 이벤트 버스를 사용하여 서비스에서 활동으로 이벤트를 보내는 방법은 무엇입니까? (0) | 2020.12.10 |