মান পার্স করার সময় অপ্রত্যাশিত চরিত্রের মুখোমুখি


113

বর্তমানে আমার কিছু সমস্যা আছে। আমি জসন.এনইটি দিয়ে সি # ব্যবহার করছি। বিষয়টি হ'ল আমি সবসময় পাই:

Value "মানটি পার্স করার সময় অপ্রত্যাশিত চরিত্রের মুখোমুখি হয়েছে: e। পথ '', লাইন 0, অবস্থান 0" "}

সুতরাং আমি যেভাবে Json.NET ব্যবহার করছি তা নিম্নলিখিত the আমার একটি ক্লাস রয়েছে যা সংরক্ষণ করা উচিত। শ্রেণিটি এরকম দেখাচ্ছে:

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
}

এখন বর্তমান = লাইন ব্যতিক্রম আসে:

Value "মানটি পার্স করার সময় অপ্রত্যাশিত চরিত্রের মুখোমুখি হয়েছে: e। পথ '', লাইন 0, অবস্থান 0" "}

আমি কেন জানি না। Json ফাইলটি নিম্নলিখিত -> আমাকে JSON লিঙ্কে ক্লিক করুন

কারো কি কোন ধারনা আছে?


2
আমি আপনার শিরোনাম সম্পাদনা করেছি। দয়া করে দেখুন, " প্রশ্নগুলিতে তাদের শিরোনামগুলিতে" ট্যাগ "অন্তর্ভুক্ত করা উচিত? ", যেখানে sensক্যমত "না, তাদের উচিত নয়"।
জন স্যান্ডার্স

আপনি কি সবসময়ই এই সমস্যার মুখোমুখি হন ডেটা যাই হোক না কেন? একবার যখন আমি এই জাতীয় সমস্যার মুখোমুখি হয়েছিলাম, কারণটি ছিল যে পরিষেবাটি অবৈধ ইউটিএফ -8 অক্ষর প্রেরণ করছে।
আনখুরি

@ জনসন্ডার্স এর জন্য দুঃখিত এটি আরও প্রশ্নের জন্য আমার মধ্যে রাখবে :)।
zAfLu

1
@ আনখুরি কেবল ফাইলগুলি পড়তে ভুলে গিয়েছিলেন ... আমার দোষ
zAfLu

ধরে নিচ্ছি যে এটি কোনও সমস্যা নয়, আর কী? recv ব্যতিক্রম-> topic "বিষয়": "রোবট 1 / লগ", "এমএসজি": "পাইলট চলমান" p মান পার্স করার সময় অপ্রত্যাশিত চরিত্রের মুখোমুখি হয়েছিল: ও। পাথ '', লাইন 0, অবস্থান 0
স্পাইকড3

উত্তর:


149

সম্ভবত আপনি JSON এ যাচ্ছেন না DeserializeObject

এটা তোলে থেকে দেখে মনে হচ্ছে File.WriteAllText(tmpfile,...যে টাইপ tmpfileহয় stringযে একটি ফাইল পাথ ধারণ করে। JsonConvert.DeserializeObjectফাইলের পথ নয়, জেএসওন মান নেয় - সুতরাং এটি এমন @"c:\temp\fooo"কোনও রূপান্তর করতে ব্যর্থ হয় - যা স্পষ্টতই জেএসওএন নয়।


75

আমি এই অনলাইন সরঞ্জামগুলির সাহায্যে সমস্যার সমাধান করেছি:

  1. জেসন কাঠামো ঠিক আছে কিনা তা পরীক্ষা করতে: http://jsonlint.com/
  2. আমার জেসন কাঠামো থেকে আমার অবজেক্ট শ্রেণি তৈরি করতে: https://www.jsonutils.com/

সাধারণ কোড:

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

2
কীভাবে check if the Json structure সি # এ ঠিক আছে?
কুইকিনেট

1
: সম্ভবত এখানে aswers আপনাকে সাহায্য করতে পারে stackoverflow.com/questions/14977848/...
শিক্ষার Pelais

2
ধন্যবাদ. json2csharp.com আমার জন্য জীবনরক্ষক ছিল। এটি ব্যবহার করে আপনি বিপরীতে ইঞ্জিনিয়ার করতে পারেন সঠিক শ্রেণীর দেখতে কেমন হওয়া উচিত। আবার ধন্যবাদ!
আমির

1
লিঙ্কটি json2csharp.com আর কাজ করে না। আমি পরিবর্তে jsonutils.com ব্যবহার করার পরামর্শ দিচ্ছি
স্টিজন

আপনার পরামর্শ @ স্টিজন হিসাবে আমি ভাঙা url কে নতুন করে পরিবর্তন করেছি।
এডু পেলাইস

14

আমি আমার Xamarin.Android সমাধানে একই ত্রুটিটি অনুভব করেছি।

আমি যাচাই করেছিলাম যে আমার জেএসএন সঠিক ছিল এবং আমি লক্ষ্য করেছি যে ত্রুটি কেবল তখনই প্রকাশিত হয়েছিল যখন আমি অ্যাপ্লিকেশনটিকে রিলিজ বিল্ড হিসাবে চালিত করি।

দেখা গেল যে লিঙ্কার নিউটনসফট.জেএসএন থেকে একটি লাইব্রেরি সরিয়ে ফেলছে, যার ফলে জেএসওএনকে ভুলভাবে পার্স করা হয়েছিল।

অ্যান্ড্রয়েড বিল্ড কনফিগারেশন (নীচের স্ক্রিন শট) এ উপেক্ষা অ্যাসেম্বলিসি সেটিংগুলিতে উপেক্ষা করুন Newtonsoft.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);
    }
}

ভিজ্যুয়াল স্টুডিও ম্যাক স্ক্রিনশট

এখানে চিত্র বর্ণনা লিখুন

ভিজ্যুয়াল স্টুডিওর স্ক্রিনশট

এখানে চিত্র বর্ণনা লিখুন


এক্সআমারিন.ফর্মস ড্রড অ্যাপের জন্য আমি ভিজ্যুয়াল স্টুডিওতে কীভাবে এটি করতে পারি?
মাইক দারভিশ

1
@ মাইকডার্বিশ আমি একটি স্ক্রিনশট যুক্ত করেছি যাতে দেখানো হয় ভিজ্যুয়াল স্টুডিওতে কীভাবে এটি সম্পাদন করা যায়
ব্র্যান্ডন মিনিক

9

আমি একটি ওয়েব এপিআই (। নেট কোর 3.0) ক্রিয়াকলাপের জন্যও এই ত্রুটির মুখোমুখি হয়েছি stringযা একটি objectবা এর পরিবর্তে বাধ্যতামূলক ছিল JObject। জেএসওএন সঠিক ছিল, তবে বাইন্ডার জেএসএন কাঠামো থেকে স্ট্রিং নেওয়ার চেষ্টা করেছিল এবং ব্যর্থ হয়েছিল।

সুতরাং, পরিবর্তে:

[HttpPost("[action]")]
public object Search([FromBody] string data)

আমাকে আরও নির্দিষ্ট ব্যবহার করতে হয়েছিল:

[HttpPost("[action]")]
public object Search([FromBody] JObject data)

এটি আমার সাথে কৌতুকটি করেছিল। নেট কোর 2.0, পোস্টম্যানের সাথে পোস্ট করা
ভিটক্স

এটি আমার জন্যও মাথা ব্যথা ছিল, তবে এটি উপলব্ধি করে কারণ প্রতিটি জেএসন একটি মূল-মূল্য জুড়ি এবং সেই শ্রেণীর একটি উদাহরণে আপনাকে জাসনকে সঠিকভাবে মানচিত্রের কী হিসাবে বৈশিষ্ট্য সহ একটি শ্রেণীর সরবরাহ করা উচিত
ইউজেন জাখারভ


5

এই সমস্যাটি JSON ফাইলে বাইট অর্ডার চিহ্নের সাথে সম্পর্কিত। JSON ফাইলটি সংরক্ষণের সময় ইউটিএফ 8 এনকোডিং ডেটা হিসাবে এনকোড হয় না। File.ReadAllText(pathFile)এই সমস্যাটি সমাধান করুন ব্যবহার করা হচ্ছে ।

যখন আমরা বাইট ডেটাতে অপারেটিং করছি এবং এটিকে স্ট্রিংয়ে রূপান্তর করছি এবং তারপরে জসনকনভার্ট.ডিজরিয়ালাইজ অবজেক্টে যাচ্ছি, আমরা স্ট্রিংটি পেতে ইউটিএফ 32 এনকোডিং ব্যবহার করতে পারি।

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

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


3

আমার এএসপি.এনইটি কোর-তে ওয়েবপি নিয়ে একই সমস্যা ছিল, আমার ক্ষেত্রে এটি ছিল কারণ আমার অ্যাপ্লিকেশনটির প্রমাণীকরণ প্রয়োজন, তারপরে এটি টিকাটি বরাদ্দ করে [AllowAnonymous]এবং এটি কাজ করে।

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

আমি এই বিষয়ে পার্টিতে দেরি করছি, তবে এটি আমার সমস্যাও ছিল। আমার ডিসরিয়ালাইজ পদ্ধতিতে "জসন" যাচাই করার সময়, এটি দেখিয়েছে যে এটি এপিআই দিয়ে প্রমাণীকরণের চেষ্টা করছে।
বেন

1

মনে করুন এটি আপনার জসন

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

যদি আপনি আবার ভেন্যুটি deserialize করতে চান তবে নীচে json পরিবর্তন করুন

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

তারপরে ভেন্যুর মান নিয়ে স্বতন্ত্র শ্রেণিতে deserialize করার চেষ্টা করুন


1
হাই, আমি জসনকনভার্ট.সরিয়ালাইজ অবজেক্টটি ব্যবহার করছি, যা আমার প্রথম ফলাফল তৈরি করবে, আমি কীভাবে দ্বিতীয়টি পেতে পারি?
ব্যবহারকারী 123456

এটি যে প্রশ্ন করা হয়েছিল তার উত্তর দেয় না।
ব্রায়ান রজার্স

1

আমার দৃশ্যে আমার কিছুটা আলাদা বার্তা ছিল, যেখানে লাইন এবং অবস্থান শূন্য ছিল না।

E. পাথ 'কাজ [0]। নাম', লাইন 1, অবস্থান 12।

আমি উদ্ধৃত বার্তার জন্য এটি গুগলের শীর্ষস্থানীয় উত্তর ছিল।

এটি ঘটেছে কারণ আমি উইন্ডোজ কমান্ড লাইন থেকে একটি প্রোগ্রাম কল করেছি, জেএসএনকে প্যারামিটার হিসাবে পাস করে।

আমি যখন আমার প্রোগ্রামের আরগগুলি পর্যালোচনা করি তখন সমস্ত ডাবল উদ্ধৃতি ছিনিয়ে নেওয়া হয়। আপনাকে সেগুলি পুনর্গঠন করতে হবে।

আমি এখানে একটি সমাধান পোস্ট । যদিও এটি সম্ভবত একটি রেইজেক্সের মাধ্যমে বাড়ানো যেতে পারে।


1

আমারও অনুরূপ ত্রুটি ছিল এবং আমি ভেবেছিলাম যে কারওর সাথে কিছু মিল রয়েছে সে ক্ষেত্রে আমি উত্তর দেব। আমি জসন ফাইলগুলির একটি ডিরেক্টরি লুপ করছি এবং সেগুলি ডিসরিয়ালাইজ করছি তবে এই একই ত্রুটিটি পাচ্ছিলাম।

সমস্যাটি হ'ল এটি লুকানো ফাইলগুলিও দখলের চেষ্টা করছিল। নিশ্চিত হয়ে নিন যে আপনি যে ফাইলটি দিয়ে যাচ্ছেন সেটি একটি জাসন ফাইল। আমি অনুমান করছি এটি পাঠ্যটিও হ্যান্ডেল করবে। আশাকরি এটা সাহায্য করবে.


1

আমার ক্ষেত্রে, আমি জসনকনভার্ট.পপুলেটঅবজেক্ট () এ ত্রুটি পেয়েছিলাম । আমার অনুরোধটি জেএসওনকে ফিরিয়ে দিচ্ছিল যা '[]' বন্ধনীগুলির অতিরিক্ত জোড়াতে আবৃত ছিল, আমার ফলাফলটিকে কেবল একটি বস্তুর পরিবর্তে একটি বস্তুর অ্যারে করে তুলল। এই বন্ধনীগুলির ভিতরে যাওয়ার জন্য আমি যা করেছি তা এখানে রয়েছে (কেবলমাত্র সেই ধরণের মডেলের জন্য):

           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);
                }

1

আপনি যদি ইউআরএল ব্যবহার করে ডেটা ডাউনলোড করে থাকেন তবে ব্যবহারের প্রয়োজন হতে পারে

var result = client.DownloadData(url);

0

দয়া করে আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে ভাগ করেছেন এমন মডেলটি পরীক্ষা করুন। কখনও কখনও আপনি এপি সংস্করণ আপডেট না করে এবং এইটি একটি আপডেট হওয়া মডেল ফিরিয়ে দেয় তবে আপনি এই ত্রুটিটি পান তবে আপনার এখনও একটি পুরানো রয়েছে। কখনও কখনও আপনি যা সিরিয়ালায়িত / ডিসিরিয়ালাইজ করেন তা পেয়ে যান কোনও বৈধ জেএসএন নয়।


-1

টোকন পাওয়ার জন্য ওয়েবএপিকে অনুরোধ প্রেরণ করার সময় আমি জামারিন ফর্মগুলিতে অনুরূপ ত্রুটি বার্তার মুখোমুখি হয়েছিলাম,

  • নিশ্চিত করুন যে জসন ফাইলে সমস্ত কী ( কী : মান) (উদাহরণস্বরূপ 'ব্যবহারকারীর নাম', 'পাসওয়ার্ড', 'গ্র্যান্ট_ টাইপ') ওয়েবএপিই ঠিক কী প্রত্যাশা করেছে, অন্যথায় এটি এই ব্যতিক্রমটিকেই আগুনে ফেলেছে।

আনহানডেল ব্যতিক্রম: নিউটোনসফট.জসন.জসন রিডার এক্সেপশন: মান পার্স করার সময় অপ্রত্যাশিত চরিত্রের মুখোমুখি হয়েছিল: <। পাথ '', লাইন 0, অবস্থান 0


-3

যখন আমি একটি অনুরূপ সমস্যার সম্মুখীন হয়েছি, আমি এটা বদলে দ্বারা নির্ধারিত &mode=xmlজন্য &mode=jsonঅনুরোধে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.