java - 通过 HTTP 调用将更多值从一台服务器传输到另一台服务器的最佳方式?

标签 java json networking http-post

我必须将数据从一台计算机传输到网络上连接的另一台计算机。可能需要传输 10-20 个值,具体取决于情况。我所做的就是打包/编码 json 中的值,然后通过 http post 调用将其传输到另一台服务器(例如连接在网络上的另一台机器)。假设数据从 ServerA 流到 ServerB,在 ServerA 中我必须打包所有数据来构造 json,在 ServerB 中我必须对其进行解码,这会占用我的大部分代码,如下所示

    String student_id = json.getString("sid");
    String student_role_number = json.getString("rnumber");
    String student_name = json.getString("name");
    String isDayScholar = json.optString("dayscholar", "false"); 
    String stream = json.optString("stream", ""); 
    String class_section = json.getString("section");

当值是 4-5 时,当有更多数量的值(例如 20-25)时,我感觉执行此 get/set 操作相当繁重。有没有更好的方法来避免/最小化这种情况?

最佳答案

当值是 4-5 时,当有更多数量的值(例如 20-25)时,它会很轻,如果您可以在某些数据结构中硬编码所有必需的键,那么这可能会有所帮助。例如,在您的情况下,所有必要的键都是 sid、rnumber、name、dayscholar 等。

为您的 key 保留单独的硬编码数据结构

org.json.JSONObject jsonObject = new org.json.JSONObject();
java.util.Map<String , Object> otherMap = new java.util.HashMap<>();

String[] myLovedKeys = {"sid" , "rnumber" , "name" , "dayscholar" , "stream" , "section"};
for( int x = 0; x < myLovedKeys.length; x++ )
{  
    if( myLovedKeys[x].equals("dayscholar") || myLovedKeys[x].equals("stream") )
    {
        String value = "";
        if( myLovedKeys[x].equals("dayscholar") )
        {
            value = json.optString( myLovedKeys[x] , "false" );
            jsonObject.put( myLovedKeys[x] , value );
            otherMap.put( myLovedKeys[x] , value );
        }
        else
        {
           value = json.optString( myLovedKeys[x] , "" ); // stream key-value
           jsonObject.put( myLovedKeys[x] , value );
           otherMap.put( myLovedKeys[x] , value );
        }
    }
    else
    {
        String keyValue = json.getString( myLovedKeys[x] ); 
        jsonObject.put( myLovedKeys[x] , keyValue );
        otherMap.put( myLovedKeys[x] , keyValue );
    }
}

这将使您能够准确地知道循环内当前正在处理哪个键,并且您可以根据您有兴趣处理哪个键来处理不同的行为

现在我声明 JSONObject 和 java.util.Map 的原因是因为我只是想详细说明这样一个事实:如果您缺少 org.json.* 库,那么您可以轻松地使用 java .util.Map,但如果你有 org.json* 库,那么你也可以以更舒服的方式处理问题。现在假设我们想要访问数据,那么我们可以轻松地尝试诸如

for( int x = 0; x < myLovedKeys.length; x++ )
{
    System.out.println( "java.util.Map: [" myLovedKeys[x] + "=" + otherMap.get( myLovedKeys[x] ) );
    System.out.println( "org.json.JSONObject: " + myLovedKeys[x] + "=" + jsobObject.getJSONObject( myLovedKeys[x] ) );  
}

以类似的方式,您可以修改和更新这些值

otherMap.put( myLovedKeys[0] , "SomeValue");
otherMap.put( myLovedKeys[1] , "Other Value" );
otherMap.put( "sid" , "SomeValue" );
otherMap.put( "rnumber" , "toSomeName");
//myLovedKeys[0] = "sid" , myLovedKeys[1] = "rnumber"

同样,您可以在 jsonObject 变量中反射(reflect)一些更改。您必须意识到,您必须处理在代码中的某处硬编码所有键名称的痛苦,是的,这将需要一些输入:),如果这还不足以提供帮助,请告诉我您的情况

关于java - 通过 HTTP 调用将更多值从一台服务器传输到另一台服务器的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42704791/

相关文章:

java - 为什么我得到 java.lang.UnsatisfiedLinkError : Unable to load library?

java - 从 fragment 的父 Activity 中调用 AsyncTask

java - JSON HashMap 反序列化

python - Twisted 中的多重响应

networking - 从 docker 容器访问主机的虚拟机

java - 是否可以在 C :/Windows/System32/location at runtime? 中放置一个 myfile.file

java - @Mock 对象实例为空

arrays - 连接 postgresql json 数组中对象的字符串值

javascript - 如何解决错误 : An unexpected 'StartArray' node was found when reading from the JSON reader. 预期为 'StartObject' 节点。?

c - 在同一 C 程序中的两个线程之间发送 UDP 消息 (Linux)