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

Java 通过HTTP调用将更多值从一台服务器传输到另一台服务器的最佳方法?,java,json,networking,http-post,Java,Json,Networking,Http Post,我必须将数据从一台机器传输到网络上连接的另一台机器。可能需要传输大约10-20个值,这取决于。我所做的就是打包/封送json中的值,并将其传输到另一台服务器,比如说,这是通过http post调用连接到网络上的另一台机器。假设数据从ServerA流到ServerB,在ServerA中,我必须打包所有数据以构建json,在ServerB中,我必须解组它,这会消耗我的大部分代码,如下所示 String student_id = json.getString("sid"); Strin

我必须将数据从一台机器传输到网络上连接的另一台机器。可能需要传输大约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)时,我觉得执行此获取/设置操作非常沉重。是否有更好的方法来避免/最小化此情况

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

为您的钥匙保留一个单独的硬编码数据结构

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变量中反映一些更改。您必须意识到的是,您必须处理硬编码代码中某个地方的所有键名的痛苦,是的,这需要一些输入:,如果这还不足以帮助您的案例,请告诉我

在这里,我们只是试图通过每次在循环中声明keyValue来打印堆栈myLovedKeys中的整个值。。。但我想将json中的每个值分配给一个标识符/变量。在这种情况下,我们有更好的选择吗?也许在你问的问题中,你问的是如何减少每行语句中的硬编码密钥规范,但我想现在你有兴趣对json进行更改??您希望在json中内部更改键值??不,我不是说打印,我是想让对json键值的访问变得通用,由于我们单独保存了所有硬编码的密钥引用,请查看编辑,如果不是您要查看的,请告诉我for@ShayHanded感谢您的输入:我希望收集json中的所有值——每个值都在一个单独的变量中——当值的数量超过4-5个时,实现这个过程是很繁重的说一些10-20个值——因为我发现我的代码中充满了getter/setter。。因此,寻求一个替代的方法来实现这一点……RaJasuBasuBrAMANIAN33,我已经做了一个编辑,请理解我所做的更改,并告诉我,如果这对你的用例没有帮助,你可能想考虑使用JSON库来支持java绑定到JSON和JAVA的数据绑定自动转换。杰克逊和格森是两位最受欢迎的歌手。不要重新发明方向盘,因为你已经发现他们通常都是平淡无奇的。使用一个像样的序列化库Jackson、GSON,只需让他们将Java类转换为JSON,然后再转换回来——使用Java Bean,两端的代码应该不超过2行。使用Base64编码的Java序列化甚至比使用当前方法更好。
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"