Инструмент для командной строки “отмечает” на окнах?

Вы должны использовать public T fromJson (JsonElement json, Type typeOfT)

public void keepsIntsAsIs(){
        String json="[{\"id\":1,\"quantity\":2},{\"id\":3,\"quantity\":4}]";
        GsonBuilder gsonBuilder = new GsonBuilder();
        Gson gson = gsonBuilder.create();
        Type objectListType = new TypeToken>>(){}.getType();
        List> l = gson.fromJson(json, objectListType);
        for(Map item : l){
            System.out.println(item);
        }
    }

Выход:

{id=1, quantity=2}
{id=3, quantity=4}

[EDIT]

Если не все поля являются целыми числами, то один из способов решить это - сопоставить json с объектом и определить десериализатор для этого объекта.

Ниже приведен пример.

Я сопоставляю json с IdQuantityName, а IdQuantityDeserializer - десериализатор json.

package com.foo;



import java.lang.reflect.Type;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;

public class TestGSON {

public void keepsIntsAsIs(){
    String json="[{\"id\":1,\"quantity\":2,\"name\":\"apple\"},{\"id\":3,\"quantity\":4,\"name\":\"orange\"}]";
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeHierarchyAdapter(IdQuantityName.class, new IdQuantityDeserializer());
    gsonBuilder.registerTypeAdapter(IdQuantityName.class, new IdQuantityDeserializer());

    Gson gson = gsonBuilder.create();
    Type objectListType = new TypeToken>(){}.getType();
    List l = gson.fromJson(json,objectListType);
    for (IdQuantityName idQuantityName : l) {
        System.out.println(idQuantityName);
    }
}



class IdQuantityName{
    private int id;
    private Object quantity;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public Object getQuantity() {
        return quantity;
    }
    public void setQuantity(Object quantity) {
        this.quantity = quantity;
    }
    public Object getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "IdQuantityName [id=" + id + ", quantity=" + quantity
                + ", name=" + name + "]";
    }



}
private  class IdQuantityDeserializer implements JsonDeserializer{

    @Override
    public IdQuantityName deserialize(JsonElement json, Type typeOfT,
            JsonDeserializationContext context) throws JsonParseException {

        JsonObject jo = json.getAsJsonObject();

        IdQuantityName idq = new IdQuantityName();
        idq.setId(jo.get("id").getAsInt());
        idq.setName(jo.get("name").getAsString());

        JsonElement jsonElement = jo.get("quantity");
        if(jsonElement instanceof JsonPrimitive){
            if(((JsonPrimitive) jsonElement).isNumber()){
                idq.setQuantity(jsonElement.getAsInt());
            };
        }
        return idq;

    }
}
public static void main(String[] args) {
    new TestGSON().keepsIntsAsIs();
}
}

12
задан Tim Post 8 July 2011 в 02:08
поделиться

7 ответов

То, что Вы ищете, называют DOSKEY

Можно использовать команду doskey для создания макросов в интерпретаторе команд. Например:

doskey mcd=mkdir "$*"$Tpushd "$*"

создает новую команду "mcd", который создает новый каталог и затем изменяется на тот каталог (я предпочитаю "pushd" "CD" в этом случае, потому что это позволяет мне использовать "popd" позже для возвращения туда, где я был прежде),

$* будет заменен остатком от командной строки после макроса, и $T используется для разграничивания двух различных команд, которые я хочу оценить. Если я ввел:

mcd foo/bar 

в командной строке это было бы эквивалентно:

mkdir "foo/bar"&pushd "foo/bar"

Следующий шаг должен создать файл, который содержит ряд макросов, которые можно затем импортировать при помощи / переключателя макрофайла. У меня есть файл (c:\tools\doskey.macros), который определяет команды, которые я регулярно использую. Каждый макрос должен быть указан на строке с тем же синтаксисом как выше.

Но Вы не хотите должными быть вручную импортировать свои макросы каждый раз, когда Вы запускаете новый интерпретатор команд, чтобы заставить их произойти автоматически, просто открыть ключ реестра

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun и установленный значение, чтобы быть doskey / макрофайл "c:\tools\doskey.macro". Выполнение этого удостоверится, что Ваши макросы автоматически предопределены каждый раз, когда Вы запускаете новый интерпретатор.

Дополнительные мысли: - если Вы хотите сделать другие вещи в AutoRun (как установленные параметры среды), можно разграничить команды с амперсандом. Мой похож: набор root=c:\SomeDir&doskey / макрофайл "c:\tools\doskey.macros" - Если Вы предпочитаете, чтобы Ваши настройки AutoRun были установлены в расчете на пользователя, можно использовать узел HKCU вместо HKLM. - Можно также использовать doskey для управления вещами как размер истории команд. - Мне нравится заканчивать все мои макросы навигации с \$* так, чтобы я мог объединить вещи в цепочку вместе - Стараться добавить кавычки как соответствующие в Ваших макросах, если Вы хотите смочь обработать пути с пробелами в них.

23
ответ дан 2 December 2019 в 03:49
поделиться

С просто Пакетным файлом попробуйте это... (сохраните как имя файла "go.bat"),

@echo off
set BookMarkFolder=c:\data\cline\bookmarks\
if exist %BookMarkFolder%%1.lnk start %BookMarkFolder%%1.lnk
if exist %BookMarkFolder%%1.bat start %BookMarkFolder%%1.bat
if exist %BookMarkFolder%%1.vbs start %BookMarkFolder%%1.vbs
if exist %BookMarkFolder%%1.URL start %BookMarkFolder%%1.URL

Любые ярлыки, пакетные файлы, Сценарии VBS или интернет-ярлыки, Вы вставляете свою папку закладок (в этом случае "c:\data\cline\bookmarks\" может затем быть открыт / полученный доступ вводом, "идут bookmarkname"

например, у Меня есть закладка, названная "stack.url". Ввод идет, стек берет меня прямо к этой странице.

Можно также хотеть исследовать Launchy

4
ответ дан 2 December 2019 в 03:49
поделиться

Другой альтернативный подход, который можно хотеть рассмотреть, мог быть должен иметь папку, которая содержит символьные ссылки на каждый из проектов или часто используемых каталогов. Таким образом, можно сделать что-то как

cd \go\svn-project-1
cd \go\my-douments 

Символьные ссылки могут быть сделаны на диске NTFS с помощью инструмента Junction

2
ответ дан 2 December 2019 в 03:49
поделиться

С PowerShell Вы могли добавить папки как переменные в Вашем файле профиля ps1, как:

$vids="C:\Users\mabster\Videos"

Затем как Unix, можно просто обратиться к переменным в командах:

cd $vids

Наличие списка переменных присвоений в одном ps1 файле, вероятно, легче, чем поддержание отдельных пакетных файлов.

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

Без Powershell можно сделать это как это:

C:\>set DOOMED=c:\windows
C:\>cd %DOOMED%
C:\WINDOWS>
1
ответ дан 2 December 2019 в 03:49
поделиться

Crono записал:

Переменные среды определяются через "набор", не предназначенный для текущей сессии только? Я могу сохранить их?

Они установлены для текущего процесса и по умолчанию наследованы любым процессом, который он создает. Они не сохраняются к реестру. Их объем может быть ограничен в cmd сценариях с "setlocal" (и "endlocal").

1
ответ дан 2 December 2019 в 03:49
поделиться

Переменные среды?

set home=D:\profiles\user\home
set svn-project1=D:\projects\project1\svn\branch\src

cd %home%

На Unix я использую это наряду с popd/pushd/cd - все время.

0
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

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