अनियोजित वाक्यविन्यास अप्रत्याशित टोकन U JSON


293

जब मैं क्रोम में अपना पेज चलाता हूं तो मुझे यह त्रुटि "अनियोजित सिंटैक्सोरियर अनपेक्षित टोकन यू" मिलती है। और फ़ायरफ़ॉक्स में मुझे मिलता है, "JSON.parse: अनपेक्षित चरित्र"। मैं php फ़ाइल से json डेटा वापस कर रहा हूँ और रिटर्निंग json स्ट्रिंग मान्य है। मैंने इसे http://jsonlint.com/ से जांचा । किसी भी मदद को सराहा जाएगा, धन्यवाद।

यहाँ लौटा JSON स्ट्रिंग है

[
    ["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"],
    ["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"],
    ["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"],
    ["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"],
    ["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"],
    ["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"],
    ["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"],
    ["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"]
]

क्या आप JSON पोस्ट कर सकते हैं? जब मुझे वह त्रुटि मिलती है तो आम तौर पर यह माना जाता है कि एक अन-टर्मिनेटेड स्ट्रिंग है - यह इंगित कर रहा है कि यह JSON में 'U' अक्षर पर है।
काइल बर्टन

\"आउटपुट में कुछ अजीब समस्या हो सकती है ।
फेलिक्स क्लिंग

यह JSON ठीक है। आपको यह पता लगाने की कोशिश करनी चाहिए कि आपका कोड वास्तव में क्या है।
nnonneo

जवाबों:


646

उस त्रुटि को आम तौर पर तब देखा जाता है जब दिया गया मूल्य JSON.parseवास्तव में होता है undefined। इसलिए, मैं उस कोड की जांच करूंगा जो इसे पार्स करने की कोशिश कर रहा है - सबसे अधिक संभावना है कि आप यहां दिखाए गए वास्तविक स्ट्रिंग को पार्स नहीं कर रहे हैं।


27
यह "undefined"शाब्दिक के बजाय एक स्ट्रिंग के रूप में भी हो सकता है undefined। मैंने सिर्फ 30 मिनट बिताए हैं।
ug_

13
@ ns47731 यह वास्तव में एक ही है। वास्तविक अपरिभाषित होने का कारण u, यह है कि undefinedएक स्ट्रिंग में coerced है (क्योंकि एक स्ट्रिंग जो JSON.parse की उम्मीद है)।
सीन किन्से

10
उघ, एक अतुल्यकालिक अनुरोध भेज रहा था और तुरंत अपरिभाषित वापसी को पार्स करने की कोशिश कर रहा था। खुद से घृणा, धन्यवाद।
क्रिस ट्रूडो

7
इस त्रुटि को गर्त के तार की शुरुआत में एक UTF-8 {"गर्त में फेंक दिया जाएगा
मेटामागिकुम

1
मेरी त्रुटि थी Unexpected token N in JSON at position...और समस्या एक doubleमूल्य थी:NaN
जयद्रथ २16'१६

14

मुझे यह संदेश मान्य करते समय (एमवीसी परियोजना में) मिल रहा था। मेरे लिए, जोड़ना ValidationMessageFor को तत्व को समस्या को ठीक किया गया।

सटीक होने के लिए, jquery.validate.unobtrusive.js में लाइन नंबर 43 समस्या का कारण बना:

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;

यह मुझे सही रास्ते पर ले गया; मेरे मामले में मैं $("form :input").valid();मान्यता को ट्रिगर करने के लिए कर रहा था । लेकिन जाहिरा तौर पर यह एक छिपा हुआ क्षेत्र पर एक त्रुटि के बिना मिला। ValidationMessageFor। बदलकर तय किया$("form :input:visible").valid();
Trax72

7

JSON.parse के लिए पैरामीटर कुछ भी नहीं लौट सकता है (यानी JSON.parse के लिए दिया गया मान undefined)!

यह मेरे साथ तब हुआ जब मैं एक xyz.sol फ़ाइल से संकलित सॉलिडिटी कोड पार्स कर रहा था।

import web3 from './web3';
import xyz from './build/xyz.json';

const i = new web3.eth.Contract(
  JSON.parse(xyz.interface),
  '0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);

export default i;

जैसा कि गलत था

JSON.parse(xyz.intereface)

जो कुछ भी नहीं लौट रहा था!


5

इस त्रुटि के अधिकांश सामान्य मामले उस टेम्पलेट का उपयोग कर रहे हैं जो नियंत्रण उत्पन्न कर रहा है idऔर फिर रास्ता बदल रहा है और / या nameकुछ के साथ डिफ़ॉल्ट टेम्पलेट को 'ओवरराइड' करके उत्पन्न किया जा रहा है

@Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} )

और फिर बदलने के लिए भूल ValidationMessageForकरने के लिए

@Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] })    

आशा है कि यह आपको कुछ समय बचाता है।


3

जब मैंने JSONArray पर लूप के लिए एक शर्त ढूंढी तो मैंने इस त्रुटि का अनुभव किया। मुझे जो समस्या का सामना करना पड़ा, वह लूप रिटर्निंग नल के लिए मूल्यों में से एक का परिणाम था। इसलिए, जब मैंने उस पर एक संपत्ति तक पहुंचने का प्रयास किया तो वह विफल हो गया।

इसलिए यदि आप JSONArrays के भीतर कुछ भी कर रहे हैं जहां आप डेटा स्रोत और इसकी अखंडता के बारे में सुनिश्चित नहीं हैं, तो मुझे लगता है कि इस मामले में अशक्त और अपरिभाषित अपवादों से निपटने के लिए इसकी एक अच्छी आदत है।

मैंने इसे JSONArray पर खोजे गए लौटाए गए मूल्य पर नल के लिए जाँच करके और अपवादों को उचित रूप से संभालकर तय किया।

सोचा यह मदद कर सकता है।


1

मेरे मामले में यह XHRResponse वापस आने से पहले एक AJAX चर पर JSON.parse () को कॉल करने की कोशिश कर रहा था। ईजी:

var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);

मैंने $ .get के लिए jQuery साइट से एक उदाहरण के साथ प्रतिस्थापित किया है :

<script type="text/javascript"> 
    var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() {
          alert( "success" );
        })
          .done(function() {
//insert code to assign the projects from Jira to a div.
                jqxhr = jqxhr.responseJSON;
                console.log(jqxhr);
                var div = document.getElementById("products");
                for (i = 0; i < jqxhr.length; i++) {
                    console.log(jqxhr[i].name);
                    div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>";
                }
                console.log(div);
            alert( "second success" );
          })
          .fail(function() {
            alert( "error" );
          })
          .always(function() {
            alert( "finished" );
          });

        // Perform other work here ...

        // Set another completion function for the request above
        jqxhr.always(function() {
          alert( "second finished" );
        });
</script>

1

अभी समझ में नहीं आया

उदाहरण के लिए, यह बताता है कि मेरे पास एक JSON STRING है .. लेकिन एक JSON OBJECT या ARRAY नहीं है।

तो अगर जावास्क्रिप्ट यू के रूप में स्ट्रिंग पार्स

var body={
  "id": 1,
  "deleted_at": null,
  "open_order": {
    "id": 16,
    "status": "open"}

var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!! 
//TODO SO
var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order

var OpenOrder=jsonBody.open_order;

ऊपर महान जवाब


1

फ़ाइल अपलोड के साथ काम करते समय जिन लोगों को इस त्रुटि का सामना करना पड़ रहा है, उनके लिए यह उत्तर ।

हम टोकन आधारित एन्क्रिप्शन - डिक्रिप्शन के लिए मिडलवेयर का उपयोग कर रहे थे और हमें एक ही त्रुटि का सामना करना पड़ा।

रूट फ़ाइल में हमारा कोड निम्नलिखित था:

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

यहाँ हम अपलोड फंक्शन से पहले मिडलवेयर को कॉल कर रहे थे और वह त्रुटि पैदा कर रहा था। इसलिए जब हमने इसे इसमें बदला, तो इसने काम किया।

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );

0

यह कोई मुश्किल काम नहीं है। यह समस्या मेरी साइट पर भी होती है आपको अपनी जेएस फाइलों को शीर्ष क्रम में स्थानांतरित करना चाहिए। क्योंकि उस स्थान पर जहाँ आप JSON Parsing का उपयोग कर रहे हैं, इस समय आपकी JS फाइलें लोड नहीं हुई हैं। उदाहरण #

<script type="text/javaScript">
...........SOME CODE.............
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

में बदलो

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>

0

खैर, उन सभी को जो वास्तव में आपके कोड में कहीं भी त्रुटि नहीं पा सकते हैं, न ही "अपरिभाषित जैसा कि स्थानीय भंडारण में है और न ही अशक्त है" .. बस अपने कोड को टिप्पणी दें और एक और लिखें जो वास्तव में आइटम को स्थानीय भंडारण में हटा देता है। .a उसके बाद, आप वर्तमान कोड को कमेंट या डिलीट कर सकते हैं और पिछले एक को फिर से सेट कर सकते हैं बस इसे अनकम्फर्टेबल करके (यदि u dint delete t ... अगर u किया तो आप इसे फिर से लिख सकते हैं :))

LocalStorage.setItem('Previous' , "removeprevious");  


LocalStorage.removeItem('Previous');   
 Console.log(LocalStorage.getItem('Previous'));

कंसोल अशक्त दिखाएगा और यह है कि आपके कोड को फिर से सेट करें यदि टी काम नहीं करता है, यार! आपको त्रुटियां मिलीं।

मेरी अंग्रेजी के लिए खेद है!


-3

मुझे यह त्रुटि मिल रही थी, जब मैं json string और पार्स किए गए json के लिए समान चर का उपयोग कर रहा था:

var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}'

function usingjson(){
    var json = JSON.parse(json);
}

मैंने फ़ंक्शन को इसमें बदल दिया:

function usingjson(){
    var j = JSON.parse(json);
}

अब यह त्रुटि दूर हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.