Я застрял, разбирая строку 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
Это то, что я узнал, что до сих пор:
JSON.Parse
является существующим и работает. Я пробовал еще одну json-строку, жестко закодированную в javascript.arr = eval("(" + response + ")");
работает должным образом. Массив и объекты полностью доступны.Я обратился сбежавший юникод обугливает 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(); }); }
Но исключение в любом случае.
- Я жёстко копии & наклеенных ответивших на 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".
что не так? Является ли копия & пастой, конвертирующей что-то, я скучаю? Что мне не хватает ???
Ваш '' 'сбежал. Этого не должно быть. – Mouser
Вы уверены, что вам нужны эти обратные косые черты, чтобы сбежать? Возможно, вы ошиблись, так как я считаю, что мне никогда не приходилось избегать этого – Ba5t14n
Также, если Chrome и IE сообщают JSON как undefined, то вы либо перезаписали собственную функцию JSON, либо используете устаревший браузер или есть еще одна ошибка скрипта. – Mouser