값을 구문 분석하는 동안 예기치 않은 문자가 발견되었습니다.
현재 몇 가지 문제가 있습니다.Json이랑 C# 쓰고 있어요.NET. 문제는 항상 다음 정보를 얻는다는 것입니다.
{"값 구문 분석 중 예기치 않은 문자가 발견되었습니다. e.경로 ' , 라인 0 , 위치 0 "}
그래서 내가 Json을 사용하는 방법.NET은 다음과 같습니다.저장해야 할 클래스가 있습니다.클래스는 다음과 같습니다.
public class stats
{
public string time { get; set; }
public string value { get; set; }
}
public class ViewerStatsFormat
{
public List<stats> viewerstats { get; set; }
public String version { get; set; }
public ViewerStatsFormat(bool chk)
{
this.viewerstats = new List<stats>();
}
}
이 클래스의 오브젝트 중 하나는 다음과 같이 채워지고 저장됩니다.
File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);
저장 부분은 정상적으로 작동하고 파일이 존재하며 채워집니다.그런 다음 다음 파일을 클래스로 다시 읽습니다.
try
{
ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
//otherstuff
}
catch(Exception ex)
{
//error loging stuff
}
이제 current= 라인에는 예외가 표시됩니다.
{"값 구문 분석 중 예기치 않은 문자가 발견되었습니다. e.경로 ' , 라인 0 , 위치 0 "}
왜 이런 일이 생기는지 모르겠어요.JSON 파일은 다음과 같습니다.-> 클릭해주세요.나는 JSON 링크입니다.
좋은 생각 있는 사람?
을 JSON에 수 .DeserializeObject
.
에서 온 것 같다.File.WriteAllText(tmpfile,...
tmpfile
string
파일에 대한 경로를 포함합니다. JsonConvert.DeserializeObject
는 파일값을 에 JSON 변환에 합니다.@"c:\temp\fooo"
JSON j j j j j j j
다음 온라인 도구로 문제를 해결했습니다.
- Json 구조가 OK인지 확인하려면http://http://jsonlint.com/ 를 참조해 주세요.
- Json 구조에서 오브젝트 클래스를 생성하려면 https://www.jsonutils.com/를 방문하십시오.
간단한 코드:
RootObject rootObj= JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(pathFile));
제 경우 JSON 문자열이 포함된 파일에 BOM이 포함되어 있었습니다.BOM을 제거하자 문제가 해결되었습니다.
자마린에서도 같은 에러가 발생했습니다.Android 솔루션
JSON이 올바른 것을 확인하고 앱을 Release Build로 실행했을 때만 오류가 발생했음을 알게 되었습니다.
링커는 뉴턴소프트에서 도서관을 철거하고 있었다.JSON: JSON이 올바르게 해석되지 않습니다.
나는 뉴턴소프트를 추가하여 오류를 수정했다.Android 빌드 구성의 어셈블리 무시 설정에 대한 Json(아래 스크린샷)
JSON 해석 코드
static readonly JsonSerializer _serializer = new JsonSerializer();
static readonly HttpClient _client = new HttpClient();
static async Task<T> GetDataObjectFromAPI<T>(string apiUrl)
{
using (var stream = await _client.GetStreamAsync(apiUrl).ConfigureAwait(false))
using (var reader = new StreamReader(stream))
using (var json = new JsonTextReader(reader))
{
if (json == null)
return default(T);
return _serializer.Deserialize<T>(json);
}
}
Visual Studio Mac 스크린샷
Visual Studio 스크린샷
, Web API()에 바인드 있던 3.0)이했습니다.Net Core 3.0)를 선택합니다.string
대 object
★★★JObject
JSON은 맞지만 바인더가 JSON 구조에서 문자열을 가져오려다 실패했습니다.
즉, 다음과 같은 것이 아니라
[HttpPost("[action]")]
public object Search([FromBody] string data)
좀 더 구체적인 것을 사용해야만 했습니다.
[HttpPost("[action]")]
public object Search([FromBody] JObject data)
의 JSON은 저장 시로 인코딩되지 .저장 시 JSON 파일은 UTF8 인코딩 데이터로 인코딩되지 않습니다.「」를 사용합니다.File.ReadAllText(pathFile)
을 사용하다
바이트 데이터로 작업하고 그것을 문자열로 변환한 후 JsonConvert로 전달하는 경우.Deserialize Object에서는 UTF32 인코딩을 사용하여 문자열을 가져올 수 있습니다.
byte[] docBytes = File.ReadAllBytes(filePath);
string jsonString = Encoding.UTF32.GetString(docBytes);
ASP webapi 。 core, 제 이 필요하기 에 NET core에 의해 됩니다.[AllowAnonymous]
그리고 그것은 성공하였다.
[AllowAnonymous]
public async Task <IList <IServic >> GetServices () {
}
이 문제가 발생했는데 입력 문자열에 BOM 문자가 포함되어 있습니다.
제가 하게 된 일은 다음과 같습니다.
String.Trim(new char[] { '\uFEFF', '\u200B' });
이것으로 문제가 해결되었습니다.
제 경우 JsonConvert에서 오류가 발생했습니다.[ Populate Object ]( ).제 요청은 여분의 '[ ]' 괄호로 둘러싸인 JSON을 반환하는 것이었습니다.이것에 의해, 제 결과는 단순한 오브젝트가 아닌 하나의 오브젝트의 배열이 되었습니다.이 브래킷 안에 넣기 위해 수행한 작업은 다음과 같습니다(이러한 모델의 경우에만 해당).
T jsonResponse = new T();
var settings = new JsonSerializerSettings
{
DateParseHandling = DateParseHandling.DateTimeOffset,
NullValueHandling = NullValueHandling.Ignore,
};
var jRslt = response.Content.ReadAsStringAsync().Result;
if (jsonResponse.GetType() == typeof(myProject.Models.MyModel))
{
var dobj = JsonConvert.DeserializeObject<MyModel[]>(jRslt);
var y = dobj.First();
var szObj = JsonConvert.SerializeObject(y);
JsonConvert.PopulateObject(szObj, jsonResponse, settings);
}
else
{
JsonConvert.PopulateObject(jRslt, jsonResponse);
}
url...을 사용하여 데이터를 다운로드하는 경우
var result = client.DownloadData(url);
제 시나리오에서는 선과 위치가 0이 아닌 약간 다른 메시지가 있었습니다.
E. 경로 'job [ 0 . name ], 줄 1, 위치 12.
이것은 내가 인용한 메시지에 대한 구글의 상위 대답이었다.
Windows 명령줄에서 프로그램을 호출하여 JSON을 매개 변수로 전달했기 때문입니다.
프로그램의 arg를 검토했을 때 큰따옴표가 모두 삭제되었습니다.그것들을 재구성해야 합니다.
여기에 해결책을 올렸습니다.Regex로 개선할 수 있을 것 같습니다.
저도 비슷한 실수를 해서 혹시 비슷한 일이 생길까 봐 대답해야겠다고 생각했어요.json 파일의 디렉토리를 루프 해, 역직렬화하고 있었습니다만, 같은 에러가 발생하고 있었습니다.
숨겨진 파일도 잡으려고 하는 것이 문제였습니다.전달하고 있는 파일이 .json 파일인지 확인합니다.문자도 처리할 수 있을 것 같아요.이게 도움이 됐으면 좋겠다.
문제는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★에 있었습니다.DateTime
일 .「EpochFormat」 「UnixTimestamp」는 「EpochFormat」입니다.JSON j j :
"direction": "outbound",
"date_archive": 1554691800224,
"date_doc": 1524700800000,
"date_sent": 1524704189000,
"date_received": 1524704189000,
"date_store_till": 1712544600224,
그래서 다음과 같은 속성을 사용했습니다.
[JsonProperty("date_received")]
[JsonConverter(typeof(MicrosecondEpochConverter))]
public DateTime? DateReceived { get; set; }
찾을 수 있습니다.MicrosecondEpochConverter
코드: https://stackoverflow.com/a/19972214/4324624
토큰을 얻기 위해 webApi에 요청을 보낼 때 Xamarin 폼에서 유사한 오류 메시지가 표시되었습니다.
- Json 파일의 모든 키(key : value)(예: 'username', 'password', 'grant_type')가 webApi가 예상하는 키인지 확인합니다.그렇지 않으면 이 예외가 발생합니다.
처리되지 않은 예외:뉴턴소프트.Json.JsonReaderException:값을 구문 분석하는 동안 예기치 않은 문자가 발생했습니다. <. 경로', 줄 0, 위치 0
클라이언트와 서버 간에 공유한 모델이 동일한지 확인하십시오.API 버전을 업데이트하지 않고 업데이트된 모델을 반환할 때 이 오류가 발생할 수 있지만 이전 모델은 여전히 존재합니다.serialize/deserialize가 유효한 JSON이 아닌 경우가 있습니다.
제 경우 디폴트 파라미터가 없는 컨스트럭터가 없었기 때문입니다.
내 경우 wait를 사용하지 않고 비동기 서비스 메서드를 호출했기 때문에 작업이 완료되기 전에 결과를 반환하려고 했습니다.
이게 네 아들이라고 가정해봐
{
"date":"11/05/2016",
"venue": "{\"ID\":12,\"CITY\":Delhi}"
}
장소를 다시 직렬 해제하려면 아래와 같이 json을 수정하십시오.
{
"date":"11/05/2016",
"venue": "{\"ID\":\"12\",\"CITY\":\"Delhi\"}"
}
그리고 장소의 가치를 취함으로써 각 클래스에 대한 직함을 해제하려고 한다.
이 오류는 json 콘텐츠를 모델 개체로 구문 분석할 때 발생합니다.Json 콘텐츠 유형이 문자열입니다.예를 들어 https://dotnetfiddle.net/uFClKj에서 호출하는 api에서 오류가 반환될 수 있습니다.응답 상태를 확인하지 않고 모델에 대한 응답을 구문 분석하면 이 문제가 발생합니다.
비슷한 문제가 생겼을 때, 나는 그것을 대신해서 고쳤다.&mode=xml
위해서&mode=json
요청서에 기재되어 있습니다.
언급URL : https://stackoverflow.com/questions/23259173/unexpected-character-encountered-while-parsing-value
'programing' 카테고리의 다른 글
Oracle SQL Developer에서 데이터베이스의 스키마 트리 목록을 보려면 어떻게 해야 합니까? (0) | 2023.04.04 |
---|---|
휴지 상태 및 스프링 부트에서 배치 삽입을 활성화하는 방법 (0) | 2023.04.04 |
커스텀 포스트 타입 퍼멀링크에 커스텀 분류법을 추가하는 방법 (0) | 2023.04.04 |
ReactJ의 라디오 버튼을 사용하는 방법 (0) | 2023.04.04 |
Bootstrap-ui 모달과 함께 ui 라우터 사용 (0) | 2023.04.04 |