web-dev-qa-db-ja.com

値の解析中に予見しない文字が見つかりました

現在、いくつか問題があります。私はJson.NETでC#を使っています。問題は私がいつも得ることです。

{"値の解析中に予期しない文字が見つかりました: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>();
    }
}

このクラスの1つのオブジェクトは、次のように入力されて保存されます。

 File.WriteAllText(tmpfile, JsonConvert.SerializeObject(current), Encoding.UTF8);

保存部分は正常に機能し、ファイルは存在していっぱいになります。その後、ファイルはクラスに読み込まれます。

    try 
{ 

    ViewerStatsFormat current = JsonConvert.DeserializeObject<ViewerStatsFormat>(tmpfile);
    //otherstuff        

}
catch(Exception ex)
{
    //error loging stuff
}

現在の=行には例外があります。

{"値の解析中に予期しない文字が見つかりました:e。パス ''、行0、位置0

なぜこれが起こるのか私は知らない。 jsonファイルは次のとおりです - > JSONリンクをクリックしてください

誰かアイデアがありますか?

78
zAfLu

おそらくあなたはJSONをDeserializeObjectに渡していないのでしょう。

File.WriteAllText(tmpfile,...からtmpfileのタイプはファイルへのパスを含むstringであるように見えます。 JsonConvert.DeserializeObjectはファイルパスではなくJSON値を取ります - それで@"c:\temp\fooo"のような何かを変換しようとして失敗します - 明らかにJSONではありません。

110
Alexei Levenkov

私はこれらのオンラインツールで問題を解決しました:

  1. Json構造が正常かどうかを確認するには、 http://jsonlint.com/ を使用します。
  2. 私のJson構造体から私のObjectクラスを生成するには: http://json2csharp.com/

簡単なコード:

RootObject rootObj= JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(pathFile));
58
Edu Pelais

私は私のXamarin.Androidソリューションで同じエラーを経験しました。

私は私のJSONが正しいことを確認し、そして私がリリースビルドとしてアプリを走らせたときにだけエラーが現れたことに気づきました。

リンカがNewtonsoft.JSONからライブラリを削除し、JSONが正しく解析されないことが判明しました。

Androidビルド構成の[アセンブリを無視]設定にNewtonsoft.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スクリーンショット

enter image description here

Visual Studioのスクリーンショット

enter image description here

11
Brandon Minnick

この問題はJSONファイルのByte Order Markに関連しています。 JSONファイルは保存時にUTF8エンコードデータとしてエンコードされません。 File.ReadAllText(pathFile)を使用してこの問題を解決してください。

Byteデータを操作し、それを文字列に変換してからJsonConvert.DeserializeObjectに渡すと、文字列を取得するためにUTF32エンコードを使用できます。

byte[] docBytes = File.ReadAllBytes(filePath);

string jsonString = Encoding.UTF32.GetString(docBytes);

2
Praveen

これがあなたのJSONだとします

{
  "date":"11/05/2016",
  "venue": "{\"ID\":12,\"CITY\":Delhi}"
}

あなたが再び会場のシリアル化を解除したい場合は、以下のようにJSONを変更してください

{
  "date":"11/05/2016",
  "venue": "{\"ID\":\"12\",\"CITY\":\"Delhi\"}"
}

そして、開催地の価値を取ることによってそれぞれのクラスに逆シリアル化するようにしてください

1
Hrishikesh T T

私はASP.NETコアのwebapiでも同じ問題を抱えていました。私の場合は私のアプリケーションが認証を必要としていたためにアノテーション[AllowAnonymous]を割り当てたのでうまくいきました。

[AllowAnonymous]
public async Task <IList <IServic >> GetServices () {
        
}
1

あなたがURLを使用してデータをダウンロードして使用しているなら...使用する必要があるかもしれません

var result = client.DownloadData(url);

0
Taran

クライアントとサーバー間で共有しているモデルが同じであることを確認してください。 Apiのバージョンを更新していないときにこのエラーが発生し、更新されたモデルが返されることがありますが、それでも古いモデルがあります。シリアライズ/デシリアライズしたものが有効なJSONではない場合があります。

0

私のシナリオでは、私はわずかに異なるメッセージを持っていました、そこでは線と位置はゼロではありませんでした。

E.パス 'job [0] .name'、1行目、12桁目。

これは私が引用したメッセージに対するGoogleのトップの回答でした。

これは、WindowsのコマンドラインからJSONをパラメータとして渡してプログラムを呼び出したために起こりました。

プログラムの引数を見直すと、二重引用符がすべて削除されました。あなたはそれらを再構成しなければなりません。

私は解決策を投稿しました こちら 。それはおそらく正規表現で強​​化することができますが。

0
JGFMK

トークンを取得するためにwebApiにリクエストを送信すると、同様のエラーメッセージがXamarin形式で表示されました。

  • Jsonファイル内のすべてのキー(key:value)(例: 'username'、 'password'、 'grant_type')がWebApiで想定されているものとまったく同じであることを確認してください。

未処理の例外:Newtonsoft.Json.JsonReaderException:値の解析中に予期しない文字が見つかりました:<。パス ''、行0、位置0

0
A. Almazidi

私は同様のエラーがあり、誰かが同様のものを持っている場合に答えると思いました。私はjsonファイルのディレクトリをループしてデシリアライズしていましたが、この同じエラーが発生していました。

問題は、隠しファイルも取得しようとしていたことです。渡すファイルが.jsonファイルであることを確認してください。テキストも処理すると思います。お役に立てれば。

0
Ibaeni