2015-01-18 3 views
0

Я застрял, разбирая строку JSON правильно. Невозможно использовать JSON.parse. Eval успешно, но я хочу безопасный способ :) я запрашиваю сайт в классе ASPX Service таким образом:Исходный javascript JSON.parse throws typeError

 [OperationContract] 
    public String queryNominatim(String request) 
    { 
     string uri = "http://nominatim.openstreetmap.org/search.php?q=" + request + nominatimParams; 
     string response = "from ajax"; 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
     req.UserAgent = HttpContext.Current.Request.UserAgent; 
     req.Method = "POST"; 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     Encoding enc = Encoding.GetEncoding(resp.CharacterSet); 
     StreamReader reader = new StreamReader(resp.GetResponseStream(), enc); 
     response = reader.ReadToEnd(); 
     reader.Close(); 
     return response; 
    } 

Где запрос название улицы, как «windmühlenstraße». Полный Ури «http://nominatim.openstreetmap.org/search.php?q = windmühlenstraße формат & = & countrycodes JSON = де & addressdetails = 1»

Ответа является строкой JSON, который я просто хочу, чтобы доставить призвание яваскрипта кода. http://jsonlint.com/ подтверждает это как правильное.

Но в JavaScript, этот код

arr = JSON.Parse(response); 

генерирует исключение:

TypeError: JSON.Parse is not a function

Это то, что я узнал, что до сих пор:

  1. JSON.Parse является существующим и работает. Я пробовал еще одну json-строку, жестко закодированную в javascript.
  2. arr = eval("(" + response + ")"); работает должным образом. Массив и объекты полностью доступны.
  3. Я обратился сбежавший юникод обугливает ServerSide к Юникоду символам этим:

    private string DecodeEncodedNonAsciiCharacters(string value) 
    { 
        return Regex.Replace(
         value, 
         @"\\u(?<Value>[a-zA-Z0-9]{4})", 
         m => 
         { 
          return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString(); 
         }); 
    } 
    

    Но исключение в любом случае.

  4. Я жёстко копии & наклеенных ответивших на Javascript для:
var original = "[{\"place_id\":\"2413006\",\"licence\":\"Data \u00a9 OpenStreetMap contributors, ODbL 1.0. http:\/\/www.openstreetmap.org\/copyright\",\"osm_type\":\"node\",\"osm_id\":\"344446896\",\"boundingbox\":[\"52.3739283\",\"52.3740283\",\"9.7434778\",\"9.7435778\"],\"lat\":\"52.3739783\",\"lon\":\"9.7435278\",\"display_name\":\"6, Theaterstra\u00dfe, Mitte, Hannover, Region Hannover, Niedersachsen, 30159, Deutschland\",\"class\":\"place\",\"type\":\"house\",\"importance\":0.311,\"address\":{\"house_number\":\"6\",\"road\":\"Theaterstra\u00dfe\",\"suburb\":\"Mitte\",\"city_district\":\"Mitte\",\"city\":\"Hannover\",\"county\":\"Region Hannover\",\"state\":\"Niedersachsen\",\"postcode\":\"30159\",\"country\":\"Deutschland\",\"country_code\":\"de\"}}]"; 

jsObject = JSON.parse(original); 

alert(jsObject[0] + ": " + jsObject[0].display_name); 

, которая успешна. Отображается отображаемое имя.

преобразованный и удаленный юникод в строке json не имеет значения. Firefox отображает правильные буквы.

in chrome ошибка написана: typeerror: undefined не является функцией. IE: typeerror: das objekt unterstützt die Eigenschaft oder Methode "parse" nicht. Значение: Object не поддерживает свойство или метод "parse".

что не так? Является ли копия & пастой, конвертирующей что-то, я скучаю? Что мне не хватает ???

+0

Ваш '' 'сбежал. Этого не должно быть. – Mouser

+0

Вы уверены, что вам нужны эти обратные косые черты, чтобы сбежать? Возможно, вы ошиблись, так как я считаю, что мне никогда не приходилось избегать этого – Ba5t14n

+1

Также, если Chrome и IE сообщают JSON как undefined, то вы либо перезаписали собственную функцию JSON, либо используете устаревший браузер или есть еще одна ошибка скрипта. – Mouser

ответ

1

Из того, что я могу сказать по первому фрагменту кода arr = JSON.Parse(response);, вы пытаетесь использовать прописную версию JSON.parse. Второй фрагмент кода отлично подходит для меня во всех современных браузерах. См. Документацию here. JavaScript чувствителен к регистру.

+0

* стыдно * Спасибо! –

1

JSON.Parse не существует в JavaScript, вы хотите JSON.parse. Нижний регистр p!