JSONException: java.lang 형식의 값.문자열을 JSONObject로 변환할 수 없습니다.
2개의 JSON-Array가 포함된 JSON 파일이 있습니다.루트용 어레이와 관광용 어레이입니다.
경로는 사용자가 네비게이트할 수 있는 여러 뷰로 구성되어야 합니다.유감스럽게도 다음 오류가 발생합니다.
JSONException: java.lang 형식의 값.문자열을 JSONObject로 변환할 수 없습니다.
JSON-File을 해석하는 변수와 코드는 다음과 같습니다.
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 Parser", json), "Log.i"("JSON Parser", "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 파서(5868):데이터 org.json 구문 분석 중 오류가 발생했습니다.JSONException: java.lang 형식의 값 // STRANGE SIGN HERE //.문자열을 JSONObject로 변환할 수 없습니다.
JSONObject를 만들기 위해 이 표지들을 어떻게 없애는지 아는 사람?
이유는 String을 작성할 때 불필요한 문자가 추가되었기 때문입니다.임시 솔루션은
return new JSONObject(json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1));
그러나 소스 문자열에서 숨겨진 문자를 제거해 보십시오.
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}")
며칠 동안 같은 문제가 있었어요.드디어 해결책을 찾았다.PHP 서버가 LOG 또는 시스템에서 볼 수 없는 일부 보이지 않는 문자를 반환했습니다.나가.
그래서 해결방법은 json String을 하나씩 서브스트링하려고 했는데 서브스트링(3)이 되자 에러가 사라졌습니다.
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);
}
이건 내게 효과가 있었다.
json = json.replace("\\\"","'");
JSONObject jo = new JSONObject(json.substring(1,json.length()-1));
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);
즉, 이중 따옴표는 필요 없습니다.
내가 이 변화를 줬는데 이젠 나한테도 통한다.
//BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, HTTP.UTF_8), 8);
json 문자열의 선두에 있는3 문자는 바이트 순서 마스크(BOM)에 대응하고 있습니다.BOM은 파일을 UTF8 파일로 식별하는 바이트 시퀀스입니다.
json을 송신하는 파일이 utf8(bom 없음) 인코딩으로 인코딩되어 있는지 확인합니다.
(TextWrangler 에디터에서도 같은 문제가 있었습니다.올바른 인코딩을 강제하려면 save as - utf8(bom 없음)을 사용합니다.
도움이 됐으면 좋겠다.
내 경우 문제가 발생한 것은php
파일이에요 원치 않는 문자를 줬죠그렇기 때문에json parsing
문제가 발생했습니다.
그 다음에 붙이고php code
에Notepad++
를 선택합니다.Encode in utf-8 without BOM
부터Encoding
탭과 이 코드를 실행합니다.
내 고민은 사라졌다.
제 경우, 제 Android 앱은 Balley를 사용하여 Microsoft Azure에서 호스팅되는 API 앱에 빈 본문으로 POST를 호출합니다.
오류:
JSONException: Value <p>iisnode of type java.lang.String cannot be converted to JSONObject
다음은 Balley JSON 요청 작성 방법에 대한 토막입니다.
final JSONObject emptyJsonObject = new JSONObject();
JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, emptyJsonObject, listener, errorListener);
이 문제를 해결하려면JSONObject
다음과 같이 빈 JSON 개체를 지정합니다.
final JSONObject emptyJsonObject = new JSONObject("{}");
키의 값이 String으로 되어 있고 이를 JSONObject로 변환하려는 경우
먼저 key.value를 다음과 같은 String 변수에 입력합니다.
String data = yourResponse.yourKey;
그런 다음 JSONAray로 변환합니다.
JSONObject myObj=new JSONObject(data);
저는 그냥 vs를 쓰면 되는 거예요. getJSONObject()
(후자는 이 오류를 발생시켰습니다).
JSONObject jsonObject = new JSONObject(jsonString);
String valueIWanted = jsonObject.getString("access_token"))
언급URL : https://stackoverflow.com/questions/10267910/jsonexception-value-of-type-java-lang-string-cannot-be-converted-to-jsonobject
'programing' 카테고리의 다른 글
리액트 네이티브 모듈 테스트 방법 (0) | 2023.02.23 |
---|---|
ESLint - TypeScript용 "no-used-vars" 설정 (0) | 2023.02.23 |
네이티브 SQL 스크립트를 JPA/Hibernate에서 실행하려면 어떻게 해야 합니까? (0) | 2023.02.23 |
IE6의 JSON(IE7) (0) | 2023.02.23 |
Python3: 요청 없는 JSON POST 요청 라이브러리 (0) | 2023.02.23 |