Что такое JSON? [закрытый]

PathGoogleMapActivity.java

public class PathGoogleMapActivity extends FragmentActivity {

private static final LatLng LOWER_MANHATTAN = new LatLng(40.722543,
        -73.998585);
private static final LatLng BROOKLYN_BRIDGE = new LatLng(40.7057, -73.9964);
private static final LatLng WALL_STREET = new LatLng(40.7064, -74.0094);

GoogleMap googleMap;
final String TAG = "PathGoogleMapActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_path_google_map);
    SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    googleMap = fm.getMap();

    MarkerOptions options = new MarkerOptions();
    options.position(LOWER_MANHATTAN);
    options.position(BROOKLYN_BRIDGE);
    options.position(WALL_STREET);
    googleMap.addMarker(options);
    String url = getMapsApiDirectionsUrl();
    ReadTask downloadTask = new ReadTask();
    downloadTask.execute(url);

    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(BROOKLYN_BRIDGE,
            13));
    addMarkers();

}

private String getMapsApiDirectionsUrl() {
    String waypoints = "waypoints=optimize:true|"
            + LOWER_MANHATTAN.latitude + "," + LOWER_MANHATTAN.longitude
            + "|" + "|" + BROOKLYN_BRIDGE.latitude + ","
            + BROOKLYN_BRIDGE.longitude + "|" + WALL_STREET.latitude + ","
            + WALL_STREET.longitude;

    String sensor = "sensor=false";
    String params = waypoints + "&" + sensor;
    String output = "json";
    String url = "https://maps.googleapis.com/maps/api/directions/"
            + output + "?" + params;
    return url;
}

private void addMarkers() {
    if (googleMap != null) {
        googleMap.addMarker(new MarkerOptions().position(BROOKLYN_BRIDGE)
                .title("First Point"));
        googleMap.addMarker(new MarkerOptions().position(LOWER_MANHATTAN)
                .title("Second Point"));
        googleMap.addMarker(new MarkerOptions().position(WALL_STREET)
                .title("Third Point"));
    }
}

private class ReadTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... url) {
        String data = "";
        try {
            HttpConnection http = new HttpConnection();
            data = http.readUrl(url[0]);
        } catch (Exception e) {
            Log.d("Background Task", e.toString());
        }
        return data;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        new ParserTask().execute(result);
    }
}

private class ParserTask extends
        AsyncTask<String, Integer, List<List<HashMap<String, String>>>> {

    @Override
    protected List<List<HashMap<String, String>>> doInBackground(
            String... jsonData) {

        JSONObject jObject;
        List<List<HashMap<String, String>>> routes = null;

        try {
            jObject = new JSONObject(jsonData[0]);
            PathJSONParser parser = new PathJSONParser();
            routes = parser.parse(jObject);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return routes;
    }

    @Override
    protected void onPostExecute(List<List<HashMap<String, String>>> routes) {
        ArrayList<LatLng> points = null;
        PolylineOptions polyLineOptions = null;

        // traversing through routes
        for (int i = 0; i < routes.size(); i++) {
            points = new ArrayList<LatLng>();
            polyLineOptions = new PolylineOptions();
            List<HashMap<String, String>> path = routes.get(i);

            for (int j = 0; j < path.size(); j++) {
                HashMap<String, String> point = path.get(j);

                double lat = Double.parseDouble(point.get("lat"));
                double lng = Double.parseDouble(point.get("lng"));
                LatLng position = new LatLng(lat, lng);

                points.add(position);
            }

            polyLineOptions.addAll(points);
            polyLineOptions.width(2);
            polyLineOptions.color(Color.BLUE);
        }

        googleMap.addPolyline(polyLineOptions);
    }
}
}

Httpconnection.java

public class HttpConnection {
public String readUrl(String mapsApiDirectionsUrl) throws IOException {
    String data = "";
    InputStream iStream = null;
    HttpURLConnection urlConnection = null;
    try {
        URL url = new URL(mapsApiDirectionsUrl);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.connect();
        iStream = urlConnection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(
                iStream));
        StringBuffer sb = new StringBuffer();
        String line = "";
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        data = sb.toString();
        br.close();
    } catch (Exception e) {
        Log.d("Exception while reading url", e.toString());
    } finally {
        iStream.close();
        urlConnection.disconnect();
    }
    return data;
}

}

PathJsonparser.java

public class PathJSONParser {

public List<List<HashMap<String, String>>> parse(JSONObject jObject) {
    List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String, 
String>>>();
    JSONArray jRoutes = null;
    JSONArray jLegs = null;
    JSONArray jSteps = null;
    try {
        jRoutes = jObject.getJSONArray("routes");
        /** Traversing all routes */
        for (int i = 0; i < jRoutes.length(); i++) {
            jLegs = ((JSONObject) jRoutes.get(i)).getJSONArray("legs");
            List<HashMap<String, String>> path = new ArrayList<HashMap<String, 
String>>();

            /** Traversing all legs */
            for (int j = 0; j < jLegs.length(); j++) {
                jSteps = ((JSONObject) jLegs.get(j)).getJSONArray("steps");

                /** Traversing all steps */
                for (int k = 0; k < jSteps.length(); k++) {
                    String polyline = "";
                    polyline = (String) ((JSONObject) ((JSONObject) jSteps
                            .get(k)).get("polyline")).get("points");
                    List<LatLng> list = decodePoly(polyline);

                    /** Traversing all points */
                    for (int l = 0; l < list.size(); l++) {
                        HashMap<String, String> hm = new HashMap<String, String>();
                        hm.put("lat",
                                Double.toString(((LatLng) list.get(l)).latitude));
                        hm.put("lng",
                                Double.toString(((LatLng) list.get(l)).longitude));
                        path.add(hm);
                    }
                }
                routes.add(path);
            }
        }

    } catch (JSONException e) {
        e.printStackTrace();
    } catch (Exception e) {
    }
    return routes;
}

/**
 * Method Courtesy :
 * jeffreysambells.com/2010/05/27
 * /decoding-polylines-from-google-maps-direction-api-with-java
 * */
private List<LatLng> decodePoly(String encoded) {

    List<LatLng> poly = new ArrayList<LatLng>();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;

    while (index < len) {
        int b, shift = 0, result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lat += dlat;

        shift = 0;
        result = 0;
        do {
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
        } while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;

        LatLng p = new LatLng((((double) lat / 1E5)),
                (((double) lng / 1E5)));
        poly.add(p);
    }
    return poly;
}
}
10
задан yesraaj 13 November 2008 в 13:47
поделиться

5 ответов

JSON (Объектная нотация JavaScript) является легким форматом обмена данными. Для людей легко читать и записать. Для машин легко проанализировать и генерировать. Это основано на подмножестве Языка программирования JavaScript, Стандартный ECMA-262 3-й Выпуск - декабрь 1999. JSON является текстовым форматом, который абсолютно независим от языка, но использует конвенции, которые знакомы программистам C-языковой-семьи, включая C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными.

Касательно: json.org

Объект является незаказанным набором пар имя/значение. Объект начинается {(левая фигурная скобка) и заканчивается} (правая фигурная скобка). Каждое имя сопровождается: (двоеточие) и пары имя/значение разделяются, (запятая).

alt text
(источник: json.org)

Массив является заказанным набором значений. Массив начинается [(левая скобка) и заканчивается] (правая скобка). Значения разделяются, (запятая).

alt text
(источник: json.org)

Значение может быть строкой в двойных кавычках, или числом, или TRUE или FALSE или пустым указателем, или объектом или массивом. Эти структуры могут быть вложены.

alt text
(источник: json.org)

Строка является набором нуля или большего количества символов Unicode, перенесенных в двойные кавычки, с помощью Escape обратной косой черты. Символ представлен как односимвольная строка. Строка очень похожа на C или строку Java.

alt text
(источник: json.org)

Число очень похоже на C или число Java, за исключением того, что восьмеричные и шестнадцатеричные форматы не используются. alt text
(источник: json.org)

Вот пример:

{
    "menu": {
        "id": "file",
        "value": "File",
        "popup": {
            "menuitem": [{
                "onclick": "CreateNewDoc()"
            }, {
                "value": "Open",
                "onclick": "OpenDoc()"
            }, {
                "value": "Close",
                "onclick": "CloseDoc()"
            }]
        }
    }
}

И в XML то же самое было бы:

<menu id="file" value="File">
  <popup>
    <menuitem value="New" onclick="CreateNewDoc()" />
    <menuitem value="Open" onclick="OpenDoc()" />
    <menuitem value="Close" onclick="CloseDoc()" />
  </popup>
</menu>

Касательно: json.org

Надеюсь, что Вы теперь понимаете то, что является JSON.

48
ответ дан 3 December 2019 в 13:18
поделиться

Из Википедии: JSON (объектная нотация JavaScript)

Формат JSON часто используется для передачи структурированных данных по сетевому соединению в процессе, названном сериализацией. Его главное приложение находится в программировании веб-приложения Ajax, где оно служит альтернативой использованию формата XML.

4
ответ дан 3 December 2019 в 13:18
поделиться

Всесторонняя версия, кажется, хорошо покрыта, возможно, Вы ищете версию закорачивать-и-упрощать?

JSON является в основном просто способом передать массив от одного языка до другого.

Это использовало много для Ajax (среди других вещей), потому что с Ajax у Вас обычно есть язык серверной стороны (PHP и т.д.) передающий ряд результатов на клиентский язык (JavaScript). Ваши вызовы JavaScript Ваша страница PHP с некоторыми параметрами; Ваша страница PHP создает массив и echos, это кодирует его к формату JSON; Ваш JavaScript ловит JSON и декодирует его назад к массиву для обработки.

Существует больше к нему, чем тот, очевидно (и по этой причине я ожидаю шквал исполосованного слезой downvotes :)), но это - все, что необходимо разбудить и работающий с ним.

3
ответ дан 3 December 2019 в 13:18
поделиться

Это - Объектная нотация JavaScript. Можно использовать его для передачи данных обратно и вперед. Это часто рекомендуется, так как там не так много служебное, как тот, который Вы получаете с XML. Поэтому это стало более популярным, чем XML с Ajax.

Смотрите на это: http://en.wikipedia.org/wiki/JSON

2
ответ дан 3 December 2019 в 13:18
поделиться

Вот отличное решение. (Честно говоря, я сам себя удивил.) В CSS есть так называемые счетчики , где вы можете установить, например, автоматические номера глав для каждого заголовка. Небольшая модификация дает вам следующее: Вам нужно будет самостоятельно разобрать отступы и т. Д.

 ol {counter-reset: list; } ол> ли {стиль списка: нет; } ol> li: before {content: counter (list, lower-alpha) ")"; счетчик-инкремент: список; } 
  тип пользовательского стиля списка (v1):  
  1. Number 1
  2. Number 2
  3. Number 3
  4. < li> Номер 4
  5. Номер 5
  6. Номер 6

Работает во всех современных браузерах и IE9 + (и, возможно, IE8, но может содержать ошибки).

Обновление: Я добавил дочерний селектор, чтобы вложенные списки не выбирали родительский стиль. Трейдер также отмечает, что выравнивание элементов списка также нарушено. В статье на 456bereastreet есть хорошее решение, которое включает в себя абсолютное позиционирование счетчика.

 ol {counter-reset: list; } ол> ли {стиль списка: нет; положение: относительное; } ol> li: до {счетчик-инкремент: список; content: counter (список, нижняя альфа) ")"; позиция: абсолютная; слева: -1,4em; } 
  Тип пользовательского стиля списка (v2):  
  1. Номер 1
  2. Номер 2
  3. Номер 3
  4. < li> Number 4
  5. Number 5
  6. Number 6

Вот jsFiddle , показывающий результат, включая вложенные списки.

Эти ДАННЫЕ слишком сложны для понимания и имеют произвольный характер, поэтому у нас есть 2 варианта представления произвольных структур данных в формате JSON или XML ] формат. Но недостаток в XML, он синтаксически более сложен и больше по размеру файла, чем JSON. Так что лучше использовать JSON

0
ответ дан 3 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: